KVM: selftests: Move platform_info_test's main assert into guest code
authorSean Christopherson <seanjc@google.com>
Thu, 14 Mar 2024 23:26:24 +0000 (16:26 -0700)
committerSean Christopherson <seanjc@google.com>
Mon, 29 Apr 2024 19:55:11 +0000 (12:55 -0700)
As a first step toward gracefully handling the expected #GP on RDMSR in
platform_info_test, move the test's assert on the non-faulting RDMSR
result into the guest itself.  This will allow using a unified flow for
the host userspace side of things.

Link: https://lore.kernel.org/r/20240314232637.2538648-6-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/x86_64/platform_info_test.c

index 2165b1ad8b383f1d4bdf46d05ab4c2eb4f8e4065..a6be98dbe6549707f5f8caef6aad95c8647f8c6a 100644 (file)
@@ -27,7 +27,9 @@ static void guest_code(void)
 
        for (;;) {
                msr_platform_info = rdmsr(MSR_PLATFORM_INFO);
-               GUEST_SYNC(msr_platform_info);
+               GUEST_ASSERT_EQ(msr_platform_info & MSR_PLATFORM_INFO_MAX_TURBO_RATIO,
+                               MSR_PLATFORM_INFO_MAX_TURBO_RATIO);
+               GUEST_SYNC(0);
                asm volatile ("inc %r11");
        }
 }
@@ -40,13 +42,15 @@ static void test_msr_platform_info_enabled(struct kvm_vcpu *vcpu)
        vcpu_run(vcpu);
        TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_IO);
 
-       get_ucall(vcpu, &uc);
-       TEST_ASSERT(uc.cmd == UCALL_SYNC,
-                       "Received ucall other than UCALL_SYNC: %lu", uc.cmd);
-       TEST_ASSERT((uc.args[1] & MSR_PLATFORM_INFO_MAX_TURBO_RATIO) ==
-               MSR_PLATFORM_INFO_MAX_TURBO_RATIO,
-               "Expected MSR_PLATFORM_INFO to have max turbo ratio mask: %i.",
-               MSR_PLATFORM_INFO_MAX_TURBO_RATIO);
+       switch (get_ucall(vcpu, &uc)) {
+       case UCALL_SYNC:
+               break;
+       case UCALL_ABORT:
+               REPORT_GUEST_ASSERT(uc);
+       default:
+               TEST_FAIL("Unexpected ucall %lu", uc.cmd);
+               break;
+       }
 }
 
 static void test_msr_platform_info_disabled(struct kvm_vcpu *vcpu)