]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: selftests: hyperv_features: test write of 1 to HV_X64_MSR_RESET
authorPiotr Zarycki <piotr.zarycki@gmail.com>
Sat, 23 May 2026 11:18:57 +0000 (13:18 +0200)
committerSean Christopherson <seanjc@google.com>
Tue, 26 May 2026 19:30:50 +0000 (12:30 -0700)
Writing 1 to HV_X64_MSR_RESET triggers a real vCPU reset; the test
was writing 0 because the host loop was not prepared to handle the
resulting KVM_EXIT_SYSTEM_EVENT. Add the missing handling and write
1 to actually exercise the reset path.

Signed-off-by: Piotr Zarycki <piotr.zarycki@gmail.com>
Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Link: https://patch.msgid.link/20260523111857.195396-1-piotr.zarycki@gmail.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/x86/hyperv_features.c

index 5053a445481136ce832474305f824c82c0869f43..2effde85c4c8633f27bad6214d301d26adbef2d8 100644 (file)
@@ -26,6 +26,7 @@ struct msr_data {
        bool fault_expected;
        bool write;
        u64 write_val;
+       bool reset_expected;
 };
 
 struct hcall_data {
@@ -267,14 +268,9 @@ static void guest_test_msrs_access(void)
                case 16:
                        msr->idx = HV_X64_MSR_RESET;
                        msr->write = true;
-                       /*
-                        * TODO: the test only writes '0' to HV_X64_MSR_RESET
-                        * at the moment, writing some other value there will
-                        * trigger real vCPU reset and the code is not prepared
-                        * to handle it yet.
-                        */
-                       msr->write_val = 0;
+                       msr->write_val = 1;
                        msr->fault_expected = false;
+                       msr->reset_expected = true;
                        break;
 
                case 17:
@@ -497,6 +493,15 @@ static void guest_test_msrs_access(void)
                         msr->idx, msr->write ? "write" : "read");
 
                vcpu_run(vcpu);
+
+               if (msr->reset_expected) {
+                       TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_SYSTEM_EVENT);
+                       TEST_ASSERT(vcpu->run->system_event.type == KVM_SYSTEM_EVENT_RESET,
+                                   "Expected reset system event, got type %u",
+                                   vcpu->run->system_event.type);
+                       goto next_stage;
+               }
+
                TEST_ASSERT_KVM_EXIT_REASON(vcpu, KVM_EXIT_IO);
 
                switch (get_ucall(vcpu, &uc)) {