Message ID | 20220121155855.213852-3-aaronlewis@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add additional testing for routing L2 exceptions | expand |
On Fri, Jan 21, 2022, Aaron Lewis wrote: > KUT has a limit of only being able to run one nested guest per vmx test. > This is limiting and not necessary. Add support for allowing a test to > run guest code multiple times. > > Signed-off-by: Aaron Lewis <aaronlewis@google.com> > --- > x86/vmx.c | 24 ++++++++++++++++++++++-- > x86/vmx.h | 2 ++ > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/x86/vmx.c b/x86/vmx.c > index f4fbb94..51eed8c 100644 > --- a/x86/vmx.c > +++ b/x86/vmx.c > @@ -1884,15 +1884,35 @@ void test_add_teardown(test_teardown_func func, void *data) > step->data = data; > } > > +static void __test_set_guest(test_guest_func func) > +{ > + assert(current->v2); > + v2_guest_main = func; > +} > + > /* > * Set the target of the first enter_guest call. Can only be called once per > * test. Must be called before first enter_guest call. > */ > void test_set_guest(test_guest_func func) > { > - assert(current->v2); > TEST_ASSERT_MSG(!v2_guest_main, "Already set guest func."); > - v2_guest_main = func; > + __test_set_guest(func); > +} > + > +/* > + * Set the target of the enter_guest call and reset the RIP so 'func' will > + * start from the beginning. This can be called multiple times per test. > + */ > +void test_override_guest(test_guest_func func) > +{ > + __test_set_guest(func); > + init_vmcs_guest(); > +} > + > +void test_set_guest_finished(void) > +{ > + guest_finished = 1; Adding test_set_guest_finished() should be a separate commit. > } > > static void check_for_guest_termination(union exit_reason exit_reason) > diff --git a/x86/vmx.h b/x86/vmx.h > index 4423986..11cb665 100644 > --- a/x86/vmx.h > +++ b/x86/vmx.h > @@ -1055,7 +1055,9 @@ void hypercall(u32 hypercall_no); > typedef void (*test_guest_func)(void); > typedef void (*test_teardown_func)(void *data); > void test_set_guest(test_guest_func func); > +void test_override_guest(test_guest_func func); > void test_add_teardown(test_teardown_func func, void *data); > void test_skip(const char *msg); > +void test_set_guest_finished(void); > > #endif > -- > 2.35.0.rc0.227.g00780c9af4-goog >
diff --git a/x86/vmx.c b/x86/vmx.c index f4fbb94..51eed8c 100644 --- a/x86/vmx.c +++ b/x86/vmx.c @@ -1884,15 +1884,35 @@ void test_add_teardown(test_teardown_func func, void *data) step->data = data; } +static void __test_set_guest(test_guest_func func) +{ + assert(current->v2); + v2_guest_main = func; +} + /* * Set the target of the first enter_guest call. Can only be called once per * test. Must be called before first enter_guest call. */ void test_set_guest(test_guest_func func) { - assert(current->v2); TEST_ASSERT_MSG(!v2_guest_main, "Already set guest func."); - v2_guest_main = func; + __test_set_guest(func); +} + +/* + * Set the target of the enter_guest call and reset the RIP so 'func' will + * start from the beginning. This can be called multiple times per test. + */ +void test_override_guest(test_guest_func func) +{ + __test_set_guest(func); + init_vmcs_guest(); +} + +void test_set_guest_finished(void) +{ + guest_finished = 1; } static void check_for_guest_termination(union exit_reason exit_reason) diff --git a/x86/vmx.h b/x86/vmx.h index 4423986..11cb665 100644 --- a/x86/vmx.h +++ b/x86/vmx.h @@ -1055,7 +1055,9 @@ void hypercall(u32 hypercall_no); typedef void (*test_guest_func)(void); typedef void (*test_teardown_func)(void *data); void test_set_guest(test_guest_func func); +void test_override_guest(test_guest_func func); void test_add_teardown(test_teardown_func func, void *data); void test_skip(const char *msg); +void test_set_guest_finished(void); #endif
KUT has a limit of only being able to run one nested guest per vmx test. This is limiting and not necessary. Add support for allowing a test to run guest code multiple times. Signed-off-by: Aaron Lewis <aaronlewis@google.com> --- x86/vmx.c | 24 ++++++++++++++++++++++-- x86/vmx.h | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-)