KVM: PPC: Book3S HV: CTRL SPR does not require read-modify-write
Processors that support KVM HV do not require read-modify-write of the CTRL SPR to set/clear their thread's runlatch. Just write 1 or 0 to it. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20211123095231.1036501-18-npiggin@gmail.com
This commit is contained in:
Родитель
b1adcf57ce
Коммит
a1a19e1154
|
@ -4071,7 +4071,7 @@ static void load_spr_state(struct kvm_vcpu *vcpu)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!(vcpu->arch.ctrl & 1))
|
if (!(vcpu->arch.ctrl & 1))
|
||||||
mtspr(SPRN_CTRLT, mfspr(SPRN_CTRLF) & ~1);
|
mtspr(SPRN_CTRLT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void store_spr_state(struct kvm_vcpu *vcpu)
|
static void store_spr_state(struct kvm_vcpu *vcpu)
|
||||||
|
|
|
@ -781,12 +781,11 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
|
||||||
mtspr SPRN_AMR,r5
|
mtspr SPRN_AMR,r5
|
||||||
mtspr SPRN_UAMOR,r6
|
mtspr SPRN_UAMOR,r6
|
||||||
|
|
||||||
/* Restore state of CTRL run bit; assume 1 on entry */
|
/* Restore state of CTRL run bit; the host currently has it set to 1 */
|
||||||
lwz r5,VCPU_CTRL(r4)
|
lwz r5,VCPU_CTRL(r4)
|
||||||
andi. r5,r5,1
|
andi. r5,r5,1
|
||||||
bne 4f
|
bne 4f
|
||||||
mfspr r6,SPRN_CTRLF
|
li r6,0
|
||||||
clrrdi r6,r6,1
|
|
||||||
mtspr SPRN_CTRLT,r6
|
mtspr SPRN_CTRLT,r6
|
||||||
4:
|
4:
|
||||||
/* Secondary threads wait for primary to have done partition switch */
|
/* Secondary threads wait for primary to have done partition switch */
|
||||||
|
@ -1209,12 +1208,12 @@ guest_bypass:
|
||||||
stw r0, VCPU_CPU(r9)
|
stw r0, VCPU_CPU(r9)
|
||||||
stw r0, VCPU_THREAD_CPU(r9)
|
stw r0, VCPU_THREAD_CPU(r9)
|
||||||
|
|
||||||
/* Save guest CTRL register, set runlatch to 1 */
|
/* Save guest CTRL register, set runlatch to 1 if it was clear */
|
||||||
mfspr r6,SPRN_CTRLF
|
mfspr r6,SPRN_CTRLF
|
||||||
stw r6,VCPU_CTRL(r9)
|
stw r6,VCPU_CTRL(r9)
|
||||||
andi. r0,r6,1
|
andi. r0,r6,1
|
||||||
bne 4f
|
bne 4f
|
||||||
ori r6,r6,1
|
li r6,1
|
||||||
mtspr SPRN_CTRLT,r6
|
mtspr SPRN_CTRLT,r6
|
||||||
4:
|
4:
|
||||||
/*
|
/*
|
||||||
|
@ -2184,8 +2183,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_TM)
|
||||||
* Also clear the runlatch bit before napping.
|
* Also clear the runlatch bit before napping.
|
||||||
*/
|
*/
|
||||||
kvm_do_nap:
|
kvm_do_nap:
|
||||||
mfspr r0, SPRN_CTRLF
|
li r0,0
|
||||||
clrrdi r0, r0, 1
|
|
||||||
mtspr SPRN_CTRLT, r0
|
mtspr SPRN_CTRLT, r0
|
||||||
|
|
||||||
li r0,1
|
li r0,1
|
||||||
|
@ -2204,8 +2202,7 @@ kvm_nap_sequence: /* desired LPCR value in r5 */
|
||||||
|
|
||||||
bl isa206_idle_insn_mayloss
|
bl isa206_idle_insn_mayloss
|
||||||
|
|
||||||
mfspr r0, SPRN_CTRLF
|
li r0,1
|
||||||
ori r0, r0, 1
|
|
||||||
mtspr SPRN_CTRLT, r0
|
mtspr SPRN_CTRLT, r0
|
||||||
|
|
||||||
mtspr SPRN_SRR1, r3
|
mtspr SPRN_SRR1, r3
|
||||||
|
|
Загрузка…
Ссылка в новой задаче