File Index
Files and directories
Sign in
FILE

xss_msr_test.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/kvm/x86/xss_msr_test.c C
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * Copyright (C) 2019, Google LLC.
 4 *
 5 * Tests for the IA32_XSS MSR.
 6 */
 7#include <sys/ioctl.h>
 8
 9#include "test_util.h"
10#include "kvm_util.h"
11#include "vmx.h"
12
13#define MSR_BITS      64
14
15int main(int argc, char *argv[])
16{
17	bool xss_in_msr_list;
18	struct kvm_vm *vm;
19	struct kvm_vcpu *vcpu;
20	uint64_t xss_val;
21	int i, r;
22
23	/* Create VM */
24	vm = vm_create_with_one_vcpu(&vcpu, NULL);
25
26	TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_XSAVES));
27
28	xss_val = vcpu_get_msr(vcpu, MSR_IA32_XSS);
29	TEST_ASSERT(xss_val == 0,
30		    "MSR_IA32_XSS should be initialized to zero");
31
32	vcpu_set_msr(vcpu, MSR_IA32_XSS, xss_val);
33
34	/*
35	 * At present, KVM only supports a guest IA32_XSS value of 0. Verify
36	 * that trying to set the guest IA32_XSS to an unsupported value fails.
37	 * Also, in the future when a non-zero value succeeds check that
38	 * IA32_XSS is in the list of MSRs to save/restore.
39	 */
40	xss_in_msr_list = kvm_msr_is_in_save_restore_list(MSR_IA32_XSS);
41	for (i = 0; i < MSR_BITS; ++i) {
42		r = _vcpu_set_msr(vcpu, MSR_IA32_XSS, 1ull << i);
43
44		/*
45		 * Setting a list of MSRs returns the entry that "faulted", or
46		 * the last entry +1 if all MSRs were successfully written.
47		 */
48		TEST_ASSERT(!r || r == 1, KVM_IOCTL_ERROR(KVM_SET_MSRS, r));
49		TEST_ASSERT(r != 1 || xss_in_msr_list,
50			    "IA32_XSS was able to be set, but was not in save/restore list");
51	}
52
53	kvm_vm_free(vm);
54}
~/ Read-only file preview.