mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Sean Christopherson <seanjc@google.com>,
	Jim Mattson <jmattson@google.com>
Subject: [PATCH v2 16/42] KVM: selftests: Verify that kvm_cpuid2.entries layout is unchanged by KVM
Date: Tue, 14 Jun 2022 20:06:41 +0000	[thread overview]
Message-ID: <20220614200707.3315957-17-seanjc@google.com> (raw)
In-Reply-To: <20220614200707.3315957-1-seanjc@google.com>

In the CPUID test, verify that KVM doesn't modify the kvm_cpuid2.entries
layout, i.e. that the order of entries and their flags is identical
between what the test provides via KVM_SET_CPUID2 and what KVM returns
via KVM_GET_CPUID2.

Asserting that the layouts match simplifies the test as there's no need
to iterate over both arrays.

Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 .../testing/selftests/kvm/x86_64/cpuid_test.c | 53 ++++++++-----------
 1 file changed, 23 insertions(+), 30 deletions(-)

diff --git a/tools/testing/selftests/kvm/x86_64/cpuid_test.c b/tools/testing/selftests/kvm/x86_64/cpuid_test.c
index 4aa784932597..dac5b1ebb512 100644
--- a/tools/testing/selftests/kvm/x86_64/cpuid_test.c
+++ b/tools/testing/selftests/kvm/x86_64/cpuid_test.c
@@ -79,41 +79,34 @@ static bool is_cpuid_mangled(struct kvm_cpuid_entry2 *entrie)
 	return false;
 }
 
-static void check_cpuid(struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 *entrie)
-{
-	int i;
-
-	for (i = 0; i < cpuid->nent; i++) {
-		if (cpuid->entries[i].function == entrie->function &&
-		    cpuid->entries[i].index == entrie->index) {
-			if (is_cpuid_mangled(entrie))
-				return;
-
-			TEST_ASSERT(cpuid->entries[i].eax == entrie->eax &&
-				    cpuid->entries[i].ebx == entrie->ebx &&
-				    cpuid->entries[i].ecx == entrie->ecx &&
-				    cpuid->entries[i].edx == entrie->edx,
-				    "CPUID 0x%x.%x differ: 0x%x:0x%x:0x%x:0x%x vs 0x%x:0x%x:0x%x:0x%x",
-				    entrie->function, entrie->index,
-				    cpuid->entries[i].eax, cpuid->entries[i].ebx,
-				    cpuid->entries[i].ecx, cpuid->entries[i].edx,
-				    entrie->eax, entrie->ebx, entrie->ecx, entrie->edx);
-			return;
-		}
-	}
-
-	TEST_ASSERT(false, "CPUID 0x%x.%x not found", entrie->function, entrie->index);
-}
-
 static void compare_cpuids(struct kvm_cpuid2 *cpuid1, struct kvm_cpuid2 *cpuid2)
 {
+	struct kvm_cpuid_entry2 *e1, *e2;
 	int i;
 
-	for (i = 0; i < cpuid1->nent; i++)
-		check_cpuid(cpuid2, &cpuid1->entries[i]);
+	TEST_ASSERT(cpuid1->nent == cpuid2->nent,
+		    "CPUID nent mismatch: %d vs. %d", cpuid1->nent, cpuid2->nent);
 
-	for (i = 0; i < cpuid2->nent; i++)
-		check_cpuid(cpuid1, &cpuid2->entries[i]);
+	for (i = 0; i < cpuid1->nent; i++) {
+		e1 = &cpuid1->entries[i];
+		e2 = &cpuid2->entries[i];
+
+		TEST_ASSERT(e1->function == e2->function &&
+			    e1->index == e2->index && e1->flags == e2->flags,
+			    "CPUID entries[%d] mismtach: 0x%x.%d.%x vs. 0x%x.%d.%x\n",
+			    i, e1->function, e1->index, e1->flags,
+			    e2->function, e2->index, e2->flags);
+
+		if (is_cpuid_mangled(e1))
+			continue;
+
+		TEST_ASSERT(e1->eax == e2->eax && e1->ebx == e2->ebx &&
+			    e1->ecx == e2->ecx && e1->edx == e2->edx,
+			    "CPUID 0x%x.%x differ: 0x%x:0x%x:0x%x:0x%x vs 0x%x:0x%x:0x%x:0x%x",
+			    e1->function, e1->index,
+			    e1->eax, e1->ebx, e1->ecx, e1->edx,
+			    e2->eax, e2->ebx, e2->ecx, e2->edx);
+	}
 }
 
 static void run_vcpu(struct kvm_vcpu *vcpu, int stage)
-- 
2.36.1.476.g0c4daa206d-goog


  parent reply	other threads:[~2022-06-14 20:08 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-14 20:06 [PATCH v2 00/42] KVM: selftests: Overhaul Part II - CPUID Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 01/42] KVM: selftests: Set KVM's supported CPUID as vCPU's CPUID during recreate Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 02/42] KVM: sefltests: Use CPUID_XSAVE and CPUID_OSXAVE instead of X86_FEATURE_* Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 03/42] KVM: selftests: Add framework to query KVM CPUID bits Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 04/42] KVM: selftests: Use kvm_cpu_has() in the SEV migration test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 05/42] KVM: selftests: Use kvm_cpu_has() for nested SVM checks Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 06/42] KVM: selftests: Use kvm_cpu_has() for nested VMX checks Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 07/42] KVM: selftests: Use kvm_cpu_has() to query PDCM in PMU selftest Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 08/42] KVM: selftests: Drop redundant vcpu_set_cpuid() from " Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 09/42] KVM: selftests: Use kvm_cpu_has() for XSAVES in XSS MSR test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 10/42] KVM: selftests: Check for _both_ XTILE data and cfg in AMX test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 11/42] KVM: selftests: Use kvm_cpu_has() " Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 12/42] KVM: selftests: Use kvm_cpu_has() for XSAVE in cr4_cpuid_sync_test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 13/42] KVM: selftests: Remove the obsolete/dead MMU role test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 14/42] KVM: selftests: Use kvm_cpu_has() for KVM's PV steal time Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 15/42] KVM: selftests: Use kvm_cpu_has() for nSVM soft INT injection test Sean Christopherson
2022-06-14 20:06 ` Sean Christopherson [this message]
2022-06-14 20:06 ` [PATCH v2 17/42] KVM: selftests: Split out kvm_cpuid2_size() from allocate_kvm_cpuid2() Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 18/42] KVM: selftests: Cache CPUID in struct kvm_vcpu Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 19/42] KVM: selftests: Don't use a static local in vcpu_get_supported_hv_cpuid() Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 20/42] KVM: selftests: Rename and tweak get_cpuid() to get_cpuid_entry() Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 21/42] KVM: selftests: Use get_cpuid_entry() in kvm_get_supported_cpuid_index() Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 22/42] KVM: selftests: Add helpers to get and modify a vCPU's CPUID entries Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 23/42] KVM: selftests: Use vm->pa_bits to generate reserved PA bits Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 24/42] KVM: selftests: Add and use helper to set vCPU's CPUID maxphyaddr Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 25/42] KVM: selftests: Use vcpu_get_cpuid_entry() in PV features test (sort of) Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 26/42] KVM: selftests: Use vCPU's CPUID directly in Hyper-V test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 27/42] KVM: selftests: Use vcpu_get_cpuid_entry() in CPUID test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 28/42] KVM: selftests: Use vcpu_{set,clear}_cpuid_feature() in nVMX state test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 29/42] KVM: selftests: Use vcpu_clear_cpuid_feature() to clear x2APIC Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 30/42] KVM: selftests: Make get_supported_cpuid() returns "const" Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 31/42] KVM: selftests: Set input function/index in raw CPUID helper(s) Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 32/42] KVM: selftests: Add this_cpu_has() to query X86_FEATURE_* via cpuid() Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 33/42] KVM: selftests: Use this_cpu_has() in CR4/CPUID sync test Sean Christopherson
2022-06-14 20:06 ` [PATCH v2 34/42] KVM: selftests: Use this_cpu_has() to detect SVM support in L1 Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 35/42] KVM: selftests: Drop unnecessary use of kvm_get_supported_cpuid_index() Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 36/42] KVM: selftests: Rename kvm_get_supported_cpuid_index() to __..._entry() Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 37/42] KVM: selftests: Inline "get max CPUID leaf" helpers Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 38/42] KVM: selftests: Check KVM's supported CPUID, not host CPUID, for XFD Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 39/42] KVM: selftests: Skip AMX test if ARCH_REQ_XCOMP_GUEST_PERM isn't supported Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 40/42] KVM: selftests: Clean up requirements for XFD-aware XSAVE features Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 41/42] KVM: selftests: Use the common cpuid() helper in cpu_vendor_string_is() Sean Christopherson
2022-06-14 20:07 ` [PATCH v2 42/42] KVM: selftests: Drop unused SVM_CPUID_FUNC macro Sean Christopherson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220614200707.3315957-17-seanjc@google.com \
    --to=seanjc@google.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®