Message ID | 20240229205354.2574207-1-andrew.cooper3@citrix.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | tests/resource: Fix HVM guest in !SHADOW builds | expand |
On Thu, Feb 29, 2024 at 08:53:54PM +0000, Andrew Cooper wrote: > Right now, test-resource always creates HVM Shadow guests. But if Xen has > SHADOW compiled out, running the test yields: > > $./test-resource > XENMEM_acquire_resource tests > Test x86 PV > Created d1 > Test grant table > Test x86 PVH > Skip: 95 - Operation not supported > > and doesn't really test HVM guests, but doesn't fail either. > > There's nothing paging-mode-specific about this test, so default to HAP if > possible and provide a more specific message if neither HAP or Shadow are > available. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com> One comment below. > --- > CC: Jan Beulich <JBeulich@suse.com> > CC: Roger Pau Monné <roger.pau@citrix.com> > CC: Wei Liu <wl@xen.org> > --- > tools/tests/resource/test-resource.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/tools/tests/resource/test-resource.c b/tools/tests/resource/test-resource.c > index 7ae88ea34807..2796053588d3 100644 > --- a/tools/tests/resource/test-resource.c > +++ b/tools/tests/resource/test-resource.c > @@ -20,6 +20,8 @@ static xc_interface *xch; > static xenforeignmemory_handle *fh; > static xengnttab_handle *gh; > > +static xc_physinfo_t physinfo; > + > static void test_gnttab(uint32_t domid, unsigned int nr_frames, > unsigned long gfn) > { > @@ -172,6 +174,23 @@ static void test_domain_configurations(void) > > printf("Test %s\n", t->name); > > +#if defined(__x86_64__) || defined(__i386__) > + /* > + * On x86, use HAP guests if possible, but skip if neither HAP nor > + * SHADOW is available. > + */ > + if ( t->create.flags & XEN_DOMCTL_CDF_hvm ) > + { > + if ( physinfo.capabilities & XEN_SYSCTL_PHYSCAP_hap ) > + t->create.flags |= XEN_DOMCTL_CDF_hap; > + else if ( !(physinfo.capabilities & XEN_SYSCTL_PHYSCAP_shadow) ) > + { > + printf(" Skip: Neither HAP or SHADOW available\n"); > + continue; > + } > + } Provided that you are already checking, might also be worth to keep in mind that at some point we might want to also check for XEN_SYSCTL_PHYSCAP_{hvm,pv} and skip those tests if the requested domain type is not available. Thanks, Roger.
On 01/03/2024 11:49 am, Roger Pau Monné wrote: > On Thu, Feb 29, 2024 at 08:53:54PM +0000, Andrew Cooper wrote: >> Right now, test-resource always creates HVM Shadow guests. But if Xen has >> SHADOW compiled out, running the test yields: >> >> $./test-resource >> XENMEM_acquire_resource tests >> Test x86 PV >> Created d1 >> Test grant table >> Test x86 PVH >> Skip: 95 - Operation not supported >> >> and doesn't really test HVM guests, but doesn't fail either. >> >> There's nothing paging-mode-specific about this test, so default to HAP if >> possible and provide a more specific message if neither HAP or Shadow are >> available. >> >> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> > Acked-by: Roger Pau Monné <roger.pau@citrix.com> > > One comment below. > >> --- >> CC: Jan Beulich <JBeulich@suse.com> >> CC: Roger Pau Monné <roger.pau@citrix.com> >> CC: Wei Liu <wl@xen.org> >> --- >> tools/tests/resource/test-resource.c | 25 +++++++++++++++++++++++++ >> 1 file changed, 25 insertions(+) >> >> diff --git a/tools/tests/resource/test-resource.c b/tools/tests/resource/test-resource.c >> index 7ae88ea34807..2796053588d3 100644 >> --- a/tools/tests/resource/test-resource.c >> +++ b/tools/tests/resource/test-resource.c >> @@ -20,6 +20,8 @@ static xc_interface *xch; >> static xenforeignmemory_handle *fh; >> static xengnttab_handle *gh; >> >> +static xc_physinfo_t physinfo; >> + >> static void test_gnttab(uint32_t domid, unsigned int nr_frames, >> unsigned long gfn) >> { >> @@ -172,6 +174,23 @@ static void test_domain_configurations(void) >> >> printf("Test %s\n", t->name); >> >> +#if defined(__x86_64__) || defined(__i386__) >> + /* >> + * On x86, use HAP guests if possible, but skip if neither HAP nor >> + * SHADOW is available. >> + */ >> + if ( t->create.flags & XEN_DOMCTL_CDF_hvm ) >> + { >> + if ( physinfo.capabilities & XEN_SYSCTL_PHYSCAP_hap ) >> + t->create.flags |= XEN_DOMCTL_CDF_hap; >> + else if ( !(physinfo.capabilities & XEN_SYSCTL_PHYSCAP_shadow) ) >> + { >> + printf(" Skip: Neither HAP or SHADOW available\n"); >> + continue; >> + } >> + } > Provided that you are already checking, might also be worth to keep in > mind that at some point we might want to also check for > XEN_SYSCTL_PHYSCAP_{hvm,pv} and skip those tests if the requested domain > type is not available. Fair point. Lemme do a v2. ~Andrew
diff --git a/tools/tests/resource/test-resource.c b/tools/tests/resource/test-resource.c index 7ae88ea34807..2796053588d3 100644 --- a/tools/tests/resource/test-resource.c +++ b/tools/tests/resource/test-resource.c @@ -20,6 +20,8 @@ static xc_interface *xch; static xenforeignmemory_handle *fh; static xengnttab_handle *gh; +static xc_physinfo_t physinfo; + static void test_gnttab(uint32_t domid, unsigned int nr_frames, unsigned long gfn) { @@ -172,6 +174,23 @@ static void test_domain_configurations(void) printf("Test %s\n", t->name); +#if defined(__x86_64__) || defined(__i386__) + /* + * On x86, use HAP guests if possible, but skip if neither HAP nor + * SHADOW is available. + */ + if ( t->create.flags & XEN_DOMCTL_CDF_hvm ) + { + if ( physinfo.capabilities & XEN_SYSCTL_PHYSCAP_hap ) + t->create.flags |= XEN_DOMCTL_CDF_hap; + else if ( !(physinfo.capabilities & XEN_SYSCTL_PHYSCAP_shadow) ) + { + printf(" Skip: Neither HAP or SHADOW available\n"); + continue; + } + } +#endif + rc = xc_domain_create(xch, &domid, &t->create); if ( rc ) { @@ -214,6 +233,8 @@ static void test_domain_configurations(void) int main(int argc, char **argv) { + int rc; + printf("XENMEM_acquire_resource tests\n"); xch = xc_interface_open(NULL, NULL, 0); @@ -227,6 +248,10 @@ int main(int argc, char **argv) if ( !gh ) err(1, "xengnttab_open"); + rc = xc_physinfo(xch, &physinfo); + if ( rc ) + err(1, "Failed to obtain physinfo"); + test_domain_configurations(); return !!nr_failures;
Right now, test-resource always creates HVM Shadow guests. But if Xen has SHADOW compiled out, running the test yields: $./test-resource XENMEM_acquire_resource tests Test x86 PV Created d1 Test grant table Test x86 PVH Skip: 95 - Operation not supported and doesn't really test HVM guests, but doesn't fail either. There's nothing paging-mode-specific about this test, so default to HAP if possible and provide a more specific message if neither HAP or Shadow are available. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> --- CC: Jan Beulich <JBeulich@suse.com> CC: Roger Pau Monné <roger.pau@citrix.com> CC: Wei Liu <wl@xen.org> --- tools/tests/resource/test-resource.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) base-commit: 635dd1120a01961a39dce6ad3f09692681379378 prerequisite-patch-id: 1fddefae616fa9a57ddc85bbf770e3c5bdb47b1f prerequisite-patch-id: 50c4a201d8fa10c1797a1b17f3f2729b5787da84 prerequisite-patch-id: 4b4799fae62b5f41b9b0d2078e8b081605341a0a