Message ID | 20190906210313.128316-9-oupton@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: VMX: Add full nested support for IA32_PERF_GLOBAL_CTRL | expand |
On 09/06/2019 02:03 PM, Oliver Upton wrote: > The current tests for guest state do not yet check the validity of > loaded state from within the nested VM. Introduce the > load_state_test_data struct to share data with the nested VM. > > Signed-off-by: Oliver Upton <oupton@google.com> > --- > x86/vmx_tests.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c > index 6f46c7759c85..84e1a7935aa1 100644 > --- a/x86/vmx_tests.c > +++ b/x86/vmx_tests.c > @@ -5017,13 +5017,28 @@ static void test_entry_msr_load(void) > test_vmx_valid_controls(false); > } > > +static struct vmx_state_area_test_data { > + u32 msr; > + u64 exp; > + bool enabled; > +} vmx_state_area_test_data; > + > static void guest_state_test_main(void) > { > + u64 obs; > + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; > + > while (1) { > - if (vmx_get_test_stage() != 2) > - vmcall(); > - else > + if (vmx_get_test_stage() == 2) > break; > + > + if (data->enabled) { > + obs = rdmsr(data->msr); > + report("Guest state is 0x%lx (expected 0x%lx)", > + data->exp == obs, obs, data->exp); > + } > + > + vmcall(); > } > > asm volatile("fnop"); > @@ -6854,7 +6869,9 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field, > u64 i, val; > u32 j; > int error; > + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; > > + data->enabled = false; > vmcs_clear_bits(ctrl_field, ctrl_bit); > if (field == GUEST_PAT) { > vmx_set_test_stage(1); Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c index 6f46c7759c85..84e1a7935aa1 100644 --- a/x86/vmx_tests.c +++ b/x86/vmx_tests.c @@ -5017,13 +5017,28 @@ static void test_entry_msr_load(void) test_vmx_valid_controls(false); } +static struct vmx_state_area_test_data { + u32 msr; + u64 exp; + bool enabled; +} vmx_state_area_test_data; + static void guest_state_test_main(void) { + u64 obs; + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; + while (1) { - if (vmx_get_test_stage() != 2) - vmcall(); - else + if (vmx_get_test_stage() == 2) break; + + if (data->enabled) { + obs = rdmsr(data->msr); + report("Guest state is 0x%lx (expected 0x%lx)", + data->exp == obs, obs, data->exp); + } + + vmcall(); } asm volatile("fnop"); @@ -6854,7 +6869,9 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field, u64 i, val; u32 j; int error; + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; + data->enabled = false; vmcs_clear_bits(ctrl_field, ctrl_bit); if (field == GUEST_PAT) { vmx_set_test_stage(1);
The current tests for guest state do not yet check the validity of loaded state from within the nested VM. Introduce the load_state_test_data struct to share data with the nested VM. Signed-off-by: Oliver Upton <oupton@google.com> --- x86/vmx_tests.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-)