Skip to content

Commit 5ecdb48

Browse files
committed
KVM: SVM: Treat DEBUGCTL[5:2] as reserved
Stop ignoring DEBUGCTL[5:2] on AMD CPUs and instead treat them as reserved. KVM has never properly virtualized AMD's legacy PBi bits, but did allow the guest (and host userspace) to set the bits. To avoid breaking guests when running on CPUs with BusLockTrap, which redefined bit 2 to BLCKDB and made bits 5:3 reserved, a previous KVM change ignored bits 5:3, e.g. so that legacy guest software wouldn't inadvertently enable BusLockTrap or hit a VMRUN failure due to setting reserved. To allow for virtualizing BusLockTrap and whatever future features may use bits 5:3, treat bits 5:2 as reserved (and hope that doing so doesn't break any existing guests). Reviewed-and-tested-by: Ravi Bangoria <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sean Christopherson <[email protected]>
1 parent bb5081f commit 5ecdb48

File tree

1 file changed

+0
-11
lines changed

1 file changed

+0
-11
lines changed

arch/x86/kvm/svm/svm.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3176,17 +3176,6 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
31763176
break;
31773177
}
31783178

3179-
/*
3180-
* AMD changed the architectural behavior of bits 5:2. On CPUs
3181-
* without BusLockTrap, bits 5:2 control "external pins", but
3182-
* on CPUs that support BusLockDetect, bit 2 enables BusLockTrap
3183-
* and bits 5:3 are reserved-to-zero. Sadly, old KVM allowed
3184-
* the guest to set bits 5:2 despite not actually virtualizing
3185-
* Performance-Monitoring/Breakpoint external pins. Drop bits
3186-
* 5:2 for backwards compatibility.
3187-
*/
3188-
data &= ~GENMASK(5, 2);
3189-
31903179
/*
31913180
* Suppress BTF as KVM doesn't virtualize BTF, but there's no
31923181
* way to communicate lack of support to the guest.

0 commit comments

Comments
 (0)