]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: VMX: Allow guest to set DEBUGCTL.RTM_DEBUG if RTM is supported
authorSean Christopherson <seanjc@google.com>
Tue, 10 Jun 2025 23:20:06 +0000 (16:20 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:04:24 +0000 (13:04 -0700)
Let the guest set DEBUGCTL.RTM_DEBUG if RTM is supported according to the
guest CPUID model, as debug support is supposed to be available if RTM is
supported, and there are no known downsides to letting the guest debug RTM
aborts.

Note, there are no known bug reports related to RTM_DEBUG, the primary
motivation is to reduce the probability of breaking existing guests when a
future change adds a missing consistency check on vmcs12.GUEST_DEBUGCTL
(KVM currently lets L2 run with whatever hardware supports; whoops).

Note #2, KVM already emulates DR6.RTM, and doesn't restrict access to
DR7.RTM.

Fixes: 83c529151ab0 ("KVM: x86: expose Intel cpu new features (HLE, RTM) to guest")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250610232010.162191-5-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/include/asm/msr-index.h
arch/x86/kvm/vmx/vmx.c

index b7dded3c811328fae3fbfa2dc43ecceb212f2519..fa878b136ebacb05289a5b8f98825226d853bcdf 100644 (file)
 #define DEBUGCTLMSR_FREEZE_PERFMON_ON_PMI      (1UL << 12)
 #define DEBUGCTLMSR_FREEZE_IN_SMM_BIT  14
 #define DEBUGCTLMSR_FREEZE_IN_SMM      (1UL << DEBUGCTLMSR_FREEZE_IN_SMM_BIT)
+#define DEBUGCTLMSR_RTM_DEBUG          BIT(15)
 
 #define MSR_PEBS_FRONTEND              0x000003f7
 
index 4ee6cc7968558e54c7ffc1cc0825fe4062f57d47..311f6fa53b679f5d7e2be4b0c2e5288fc9902844 100644 (file)
@@ -2186,6 +2186,10 @@ static u64 vmx_get_supported_debugctl(struct kvm_vcpu *vcpu, bool host_initiated
            (host_initiated || intel_pmu_lbr_is_enabled(vcpu)))
                debugctl |= DEBUGCTLMSR_LBR | DEBUGCTLMSR_FREEZE_LBRS_ON_PMI;
 
+       if (boot_cpu_has(X86_FEATURE_RTM) &&
+           (host_initiated || guest_cpu_cap_has(vcpu, X86_FEATURE_RTM)))
+               debugctl |= DEBUGCTLMSR_RTM_DEBUG;
+
        return debugctl;
 }