Commit 947ab90c authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: selftests: Verify MSRs are (not) in save/restore list when (un)supported



Add a check in the MSRs test to verify that KVM's reported support for
MSRs with feature bits is consistent between KVM's MSR save/restore lists
and KVM's supported CPUID.

To deal with Intel's wonderful decision to bundle IBT and SHSTK under CET,
track the "second" feature to avoid false failures when running on a CPU
with only one of IBT or SHSTK.

Reviewed-by: default avatarChao Gao <chao.gao@intel.com>
Link: https://lore.kernel.org/r/20250919223258.1604852-51-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 3469fd20
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -444,12 +444,29 @@ static void test_msrs(void)
	}

	for (idx = 0; idx < ARRAY_SIZE(__msrs); idx++) {
		if (msrs[idx].is_kvm_defined) {
		struct kvm_msr *msr = &msrs[idx];

		if (msr->is_kvm_defined) {
			for (i = 0; i < NR_VCPUS; i++)
				host_test_kvm_reg(vcpus[i]);
			continue;
		}

		/*
		 * Verify KVM_GET_SUPPORTED_CPUID and KVM_GET_MSR_INDEX_LIST
		 * are consistent with respect to MSRs whose existence is
		 * enumerated via CPUID.  Skip the check for FS/GS.base MSRs,
		 * as they aren't reported in the save/restore list since their
		 * state is managed via SREGS.
		 */
		TEST_ASSERT(msr->index == MSR_FS_BASE || msr->index == MSR_GS_BASE ||
			    kvm_msr_is_in_save_restore_list(msr->index) ==
			    (kvm_cpu_has(msr->feature) || kvm_cpu_has(msr->feature2)),
			    "%s %s in save/restore list, but %s according to CPUID", msr->name,
			    kvm_msr_is_in_save_restore_list(msr->index) ? "is" : "isn't",
			    (kvm_cpu_has(msr->feature) || kvm_cpu_has(msr->feature2)) ?
			    "supported" : "unsupported");

		sync_global_to_guest(vm, idx);

		vcpus_run(vcpus, NR_VCPUS);