Skip to content

Commit 551447c

Browse files
committed
selftest: kvm: Reorder vcpu_load_state steps for AMX
For AMX support it is recommended to load XCR0 after XFD, so that KVM does not see XFD=0, XCR=1 for a save state that will eventually be disabled (which would lead to premature allocation of the space required for that save state). It is also required to load XSAVE data after XCR0 and XFD, so that KVM can trigger allocation of the extra space required to store AMX state. Adjust vcpu_load_state to obey these new requirements. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Yang Zhong <yang.zhong@intel.com> Message-Id: <20211223145322.2914028-2-yang.zhong@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent b5274b1 commit 551447c

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

tools/testing/selftests/kvm/lib/x86_64/processor.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,24 +1212,25 @@ void vcpu_load_state(struct kvm_vm *vm, uint32_t vcpuid, struct kvm_x86_state *s
12121212
struct vcpu *vcpu = vcpu_find(vm, vcpuid);
12131213
int r;
12141214

1215-
r = ioctl(vcpu->fd, KVM_SET_XSAVE, state->xsave);
1216-
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_XSAVE, r: %i",
1215+
r = ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs);
1216+
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_SREGS, r: %i",
12171217
r);
12181218

1219+
r = ioctl(vcpu->fd, KVM_SET_MSRS, &state->msrs);
1220+
TEST_ASSERT(r == state->msrs.nmsrs,
1221+
"Unexpected result from KVM_SET_MSRS, r: %i (failed at %x)",
1222+
r, r == state->msrs.nmsrs ? -1 : state->msrs.entries[r].index);
1223+
12191224
if (kvm_check_cap(KVM_CAP_XCRS)) {
12201225
r = ioctl(vcpu->fd, KVM_SET_XCRS, &state->xcrs);
12211226
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_XCRS, r: %i",
12221227
r);
12231228
}
12241229

1225-
r = ioctl(vcpu->fd, KVM_SET_SREGS, &state->sregs);
1226-
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_SREGS, r: %i",
1230+
r = ioctl(vcpu->fd, KVM_SET_XSAVE, state->xsave);
1231+
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_XSAVE, r: %i",
12271232
r);
12281233

1229-
r = ioctl(vcpu->fd, KVM_SET_MSRS, &state->msrs);
1230-
TEST_ASSERT(r == state->msrs.nmsrs, "Unexpected result from KVM_SET_MSRS, r: %i (failed at %x)",
1231-
r, r == state->msrs.nmsrs ? -1 : state->msrs.entries[r].index);
1232-
12331234
r = ioctl(vcpu->fd, KVM_SET_VCPU_EVENTS, &state->events);
12341235
TEST_ASSERT(r == 0, "Unexpected result from KVM_SET_VCPU_EVENTS, r: %i",
12351236
r);

0 commit comments

Comments
 (0)