KVM: selftests: Adapt hyperv_cpuid test to the newly introduced Enlightened MSR-Bitmap
authorVitaly Kuznetsov <vkuznets@redhat.com>
Thu, 3 Feb 2022 10:46:15 +0000 (11:46 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 10 Feb 2022 18:50:46 +0000 (13:50 -0500)
CPUID 0x40000000.EAX is now always present as it has Enlightened
MSR-Bitmap feature bit set. Adapt the test accordingly. Opportunistically
add a check for the supported eVMCS version range.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20220203104620.277031-2-vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c

index 7e2d2d1..8c245ab 100644 (file)
@@ -49,16 +49,13 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
                          bool evmcs_expected)
 {
        int i;
-       int nent = 9;
+       int nent_expected = 10;
        u32 test_val;
 
-       if (evmcs_expected)
-               nent += 1; /* 0x4000000A */
-
-       TEST_ASSERT(hv_cpuid_entries->nent == nent,
+       TEST_ASSERT(hv_cpuid_entries->nent == nent_expected,
                    "KVM_GET_SUPPORTED_HV_CPUID should return %d entries"
-                   " with evmcs=%d (returned %d)",
-                   nent, evmcs_expected, hv_cpuid_entries->nent);
+                   " (returned %d)",
+                   nent_expected, hv_cpuid_entries->nent);
 
        for (i = 0; i < hv_cpuid_entries->nent; i++) {
                struct kvm_cpuid_entry2 *entry = &hv_cpuid_entries->entries[i];
@@ -68,9 +65,6 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
                            "function %x is our of supported range",
                            entry->function);
 
-               TEST_ASSERT(evmcs_expected || (entry->function != 0x4000000A),
-                           "0x4000000A leaf should not be reported");
-
                TEST_ASSERT(entry->index == 0,
                            ".index field should be zero");
 
@@ -97,8 +91,20 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
                                    "NoNonArchitecturalCoreSharing bit"
                                    " doesn't reflect SMT setting");
                        break;
-               }
+               case 0x4000000A:
+                       TEST_ASSERT(entry->eax & (1UL << 19),
+                                   "Enlightened MSR-Bitmap should always be supported"
+                                   " 0x40000000.EAX: %x", entry->eax);
+                       if (evmcs_expected)
+                               TEST_ASSERT((entry->eax & 0xffff) == 0x101,
+                                   "Supported Enlightened VMCS version range is supposed to be 1:1"
+                                   " 0x40000000.EAX: %x", entry->eax);
+
+                       break;
+               default:
+                       break;
 
+               }
                /*
                 * If needed for debug:
                 * fprintf(stdout,
@@ -107,7 +113,6 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
                 *      entry->edx);
                 */
        }
-
 }
 
 void test_hv_cpuid_e2big(struct kvm_vm *vm, bool system)