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@xxxxxxxxxx> > --- > 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 >