| From b86bb11e3a79ac0db9a6786b1fe80f74321cb076 Mon Sep 17 00:00:00 2001 |
| From: Wanpeng Li <wanpengli@tencent.com> |
| Date: Thu, 22 Apr 2021 16:34:19 +0800 |
| Subject: KVM: X86: Fix failure to boost kernel lock holder candidate in SEV-ES guests |
| |
| From: Wanpeng Li <wanpengli@tencent.com> |
| |
| commit b86bb11e3a79ac0db9a6786b1fe80f74321cb076 upstream. |
| |
| Commit f1c6366e3043 ("KVM: SVM: Add required changes to support intercepts under |
| SEV-ES") prevents hypervisor accesses guest register state when the guest is |
| running under SEV-ES. The initial value of vcpu->arch.guest_state_protected |
| is false, it will not be updated in preemption notifiers after this commit which |
| means that the kernel spinlock lock holder will always be skipped to boost. Let's |
| fix it by always treating preempted is in the guest kernel mode, false positive |
| is better than skip completely. |
| |
| Fixes: f1c6366e3043 (KVM: SVM: Add required changes to support intercepts under SEV-ES) |
| Signed-off-by: Wanpeng Li <wanpengli@tencent.com> |
| Message-Id: <1619080459-30032-1-git-send-email-wanpengli@tencent.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/x86.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/arch/x86/kvm/x86.c |
| +++ b/arch/x86/kvm/x86.c |
| @@ -10888,6 +10888,9 @@ bool kvm_arch_dy_runnable(struct kvm_vcp |
| |
| bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) |
| { |
| + if (vcpu->arch.guest_state_protected) |
| + return true; |
| + |
| return vcpu->arch.preempted_in_kernel; |
| } |
| |