diff mbox series

tests/resource: Fix HVM guest in !SHADOW builds

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

Commit Message

Andrew Cooper Feb. 29, 2024, 8:53 p.m. UTC
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

Comments

Roger Pau Monné March 1, 2024, 11:49 a.m. UTC | #1
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.
Andrew Cooper March 1, 2024, 12:07 p.m. UTC | #2
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 mbox series

Patch

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;