mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
selftests: kvm: fix vmx_set_nested_state_test
vmx_set_nested_state_test is trying to use the KVM_STATE_NESTED_EVMCS without enabling enlightened VMCS first. Correct the outcome of the test, and actually test that it succeeds after the capability is enabled. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
65efa61dc0
commit
c930e19790
@ -25,6 +25,8 @@
|
||||
#define VMCS12_REVISION 0x11e57ed0
|
||||
#define VCPU_ID 5
|
||||
|
||||
bool have_evmcs;
|
||||
|
||||
void test_nested_state(struct kvm_vm *vm, struct kvm_nested_state *state)
|
||||
{
|
||||
vcpu_nested_state_set(vm, VCPU_ID, state, false);
|
||||
@ -75,8 +77,9 @@ void set_default_vmx_state(struct kvm_nested_state *state, int size)
|
||||
{
|
||||
memset(state, 0, size);
|
||||
state->flags = KVM_STATE_NESTED_GUEST_MODE |
|
||||
KVM_STATE_NESTED_RUN_PENDING |
|
||||
KVM_STATE_NESTED_EVMCS;
|
||||
KVM_STATE_NESTED_RUN_PENDING;
|
||||
if (have_evmcs)
|
||||
state->flags |= KVM_STATE_NESTED_EVMCS;
|
||||
state->format = 0;
|
||||
state->size = size;
|
||||
state->hdr.vmx.vmxon_pa = 0x1000;
|
||||
@ -126,13 +129,19 @@ void test_vmx_nested_state(struct kvm_vm *vm)
|
||||
/*
|
||||
* Setting vmxon_pa == -1ull and vmcs_pa == -1ull exits early without
|
||||
* setting the nested state but flags other than eVMCS must be clear.
|
||||
* The eVMCS flag can be set if the enlightened VMCS capability has
|
||||
* been enabled.
|
||||
*/
|
||||
set_default_vmx_state(state, state_sz);
|
||||
state->hdr.vmx.vmxon_pa = -1ull;
|
||||
state->hdr.vmx.vmcs12_pa = -1ull;
|
||||
test_nested_state_expect_einval(vm, state);
|
||||
|
||||
state->flags = KVM_STATE_NESTED_EVMCS;
|
||||
state->flags &= KVM_STATE_NESTED_EVMCS;
|
||||
if (have_evmcs) {
|
||||
test_nested_state_expect_einval(vm, state);
|
||||
vcpu_enable_evmcs(vm, VCPU_ID);
|
||||
}
|
||||
test_nested_state(vm, state);
|
||||
|
||||
/* It is invalid to have vmxon_pa == -1ull and SMM flags non-zero. */
|
||||
@ -217,6 +226,8 @@ int main(int argc, char *argv[])
|
||||
struct kvm_nested_state state;
|
||||
struct kvm_cpuid_entry2 *entry = kvm_get_supported_cpuid_entry(1);
|
||||
|
||||
have_evmcs = kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS);
|
||||
|
||||
if (!kvm_check_cap(KVM_CAP_NESTED_STATE)) {
|
||||
printf("KVM_CAP_NESTED_STATE not available, skipping test\n");
|
||||
exit(KSFT_SKIP);
|
||||
|
Loading…
Reference in New Issue
Block a user