1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2019, Google LLC.
5 * Tests for the IA32_XSS MSR.
15 int main(int argc
, char *argv
[])
19 struct kvm_vcpu
*vcpu
;
24 vm
= vm_create_with_one_vcpu(&vcpu
, NULL
);
26 TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_XSAVES
));
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");
32 vcpu_set_msr(vcpu
, MSR_IA32_XSS
, xss_val
);
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.
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
);
45 * Setting a list of MSRs returns the entry that "faulted", or
46 * the last entry +1 if all MSRs were successfully written.
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");