x86: xsave: Always verify XCR0 is actually written
When testing writes to XCR0, always verify that XCR0 reads back what was
written.
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <20251121180901.271486-10-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/x86/xsave.c b/x86/xsave.c
index 72e9c67..54905e0 100644
--- a/x86/xsave.c
+++ b/x86/xsave.c
@@ -43,9 +43,17 @@
__TEST_VMOVDQA(ymm##r1, ymm##r2, KVM_FEP); \
} while (0)
+static void test_write_xcr0(u64 val)
+{
+ write_xcr0(val);
+
+ report(read_xcr0() == val,
+ "Wanted XCR0 == 0x%lx, got XCR0 == 0x%lx", val, read_xcr0());
+}
+
static __attribute__((target("avx"))) void test_avx_vmovdqa(void)
{
- write_xcr0(XFEATURE_MASK_FP_SSE | XFEATURE_MASK_YMM);
+ test_write_xcr0(XFEATURE_MASK_FP_SSE | XFEATURE_MASK_YMM);
TEST_VMOVDQA(0, 15);
TEST_VMOVDQA(1, 14);
@@ -120,9 +128,8 @@
"Check CPUID.1.ECX.OSXSAVE - expect 1");
printf("\tLegal tests\n");
- write_xcr0(XFEATURE_MASK_FP);
- write_xcr0(XFEATURE_MASK_FP_SSE);
- (void)read_xcr0();
+ test_write_xcr0(XFEATURE_MASK_FP);
+ test_write_xcr0(XFEATURE_MASK_FP_SSE);
if (supported_xcr0 & XFEATURE_MASK_YMM)
test_avx_vmovdqa();