KVM: PPC: Book3S HV P9: Restrict DSISR canary workaround to processors that require it
Use CPU_FTR_P9_RADIX_PREFETCH_BUG to apply the workaround, to test for DD2.1 and below processors. This saves a mtSPR in guest entry. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20211123095231.1036501-35-npiggin@gmail.com
This commit is contained in:
Родитель
3e7b337902
Коммит
d55b1eccc7
|
@ -1590,7 +1590,8 @@ static int kvmppc_handle_exit_hv(struct kvm_vcpu *vcpu,
|
|||
unsigned long vsid;
|
||||
long err;
|
||||
|
||||
if (vcpu->arch.fault_dsisr == HDSISR_CANARY) {
|
||||
if (cpu_has_feature(CPU_FTR_P9_RADIX_PREFETCH_BUG) &&
|
||||
unlikely(vcpu->arch.fault_dsisr == HDSISR_CANARY)) {
|
||||
r = RESUME_GUEST; /* Just retry if it's the canary */
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -683,9 +683,11 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
|
|||
* HDSI which should correctly update the HDSISR the second time HDSI
|
||||
* entry.
|
||||
*
|
||||
* Just do this on all p9 processors for now.
|
||||
* The "radix prefetch bug" test can be used to test for this bug, as
|
||||
* it also exists fo DD2.1 and below.
|
||||
*/
|
||||
mtspr(SPRN_HDSISR, HDSISR_CANARY);
|
||||
if (cpu_has_feature(CPU_FTR_P9_RADIX_PREFETCH_BUG))
|
||||
mtspr(SPRN_HDSISR, HDSISR_CANARY);
|
||||
|
||||
mtspr(SPRN_SPRG0, vcpu->arch.shregs.sprg0);
|
||||
mtspr(SPRN_SPRG1, vcpu->arch.shregs.sprg1);
|
||||
|
|
Загрузка…
Ссылка в новой задаче