| From ac35d395216d2db6535082fde4a62a3ee3849d40 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 14 Aug 2025 17:11:51 -0700 |
| Subject: KVM: x86: Snapshot the host's DEBUGCTL after disabling IRQs |
| |
| From: Sean Christopherson <seanjc@google.com> |
| |
| [ Upstream commit 189ecdb3e112da703ac0699f4ec76aa78122f911 ] |
| |
| Snapshot the host's DEBUGCTL after disabling IRQs, as perf can toggle |
| debugctl bits from IRQ context, e.g. when enabling/disabling events via |
| smp_call_function_single(). Taking the snapshot (long) before IRQs are |
| disabled could result in KVM effectively clobbering DEBUGCTL due to using |
| a stale snapshot. |
| |
| Cc: stable@vger.kernel.org |
| Reviewed-and-tested-by: Ravi Bangoria <ravi.bangoria@amd.com> |
| Link: https://lore.kernel.org/r/20250227222411.3490595-6-seanjc@google.com |
| Signed-off-by: Sean Christopherson <seanjc@google.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/kvm/x86.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
| index ba24bb50af57..b0ae61ba9b99 100644 |
| --- a/arch/x86/kvm/x86.c |
| +++ b/arch/x86/kvm/x86.c |
| @@ -4742,7 +4742,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) |
| |
| /* Save host pkru register if supported */ |
| vcpu->arch.host_pkru = read_pkru(); |
| - vcpu->arch.host_debugctl = get_debugctlmsr(); |
| |
| /* Apply any externally detected TSC adjustments (due to suspend) */ |
| if (unlikely(vcpu->arch.tsc_offset_adjustment)) { |
| @@ -10851,6 +10850,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) |
| set_debugreg(0, 7); |
| } |
| |
| + vcpu->arch.host_debugctl = get_debugctlmsr(); |
| + |
| guest_timing_enter_irqoff(); |
| |
| for (;;) { |
| -- |
| 2.50.1 |
| |