[PATCH v2 15/17] tools/init-dom0less: Factor out xenstore setup

Jason Andryuk posted 17 patches 3 months, 2 weeks ago
[PATCH v2 15/17] tools/init-dom0less: Factor out xenstore setup
Posted by Jason Andryuk 3 months, 2 weeks ago
Factor out the xenstore setup code into configure_xenstore().  This is
in preparation for handling already-introduced domains.

Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
---
 tools/helpers/init-dom0less.c | 51 ++++++++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 15 deletions(-)

diff --git a/tools/helpers/init-dom0less.c b/tools/helpers/init-dom0less.c
index a182dce563..6ae7cf2e7e 100644
--- a/tools/helpers/init-dom0less.c
+++ b/tools/helpers/init-dom0less.c
@@ -235,43 +235,43 @@ err:
     return rc;
 }
 
-static int init_domain(struct xs_handle *xsh,
-                       struct xc_interface_core *xch,
-                       xenforeignmemory_handle *xfh,
-                       libxl_dominfo *info)
+static int configure_xenstore(struct xs_handle *xsh,
+                              struct xc_interface_core *xch,
+                              xenforeignmemory_handle *xfh,
+                              libxl_dominfo *info,
+                              uint64_t *xenstore_evtchn,
+                              uint64_t *xenstore_pfn)
 {
-    libxl_uuid uuid;
-    uint64_t xenstore_evtchn, xenstore_pfn;
     int rc;
 
-    printf("Init dom0less domain: %u\n", info->domid);
+    printf("Introduce dom0less domain: %u\n", info->domid);
 
     rc = xc_hvm_param_get(xch, info->domid, HVM_PARAM_STORE_EVTCHN,
-                          &xenstore_evtchn);
+                          xenstore_evtchn);
     if (rc != 0) {
         printf("Failed to get HVM_PARAM_STORE_EVTCHN\n");
         return 1;
     }
 
     /* no xen,enhanced; nothing to do */
-    if (!xenstore_evtchn)
+    if (!*xenstore_evtchn)
         return 0;
 
     /* Get xenstore page */
-    if (get_xs_page(xch, info, &xenstore_pfn) != 0)
+    if (get_xs_page(xch, info, xenstore_pfn) != 0)
         return 1;
 
-    if (xenstore_pfn == ~0ULL) {
+    if (*xenstore_pfn == ~0ULL) {
         struct xenstore_domain_interface *intf;
 
-        rc = alloc_xs_page(xch, info, &xenstore_pfn);
+        rc = alloc_xs_page(xch, info, xenstore_pfn);
         if (rc != 0) {
             printf("Error on getting xenstore page\n");
             return 1;
         }
 
         intf = xenforeignmemory_map(xfh, info->domid, PROT_READ | PROT_WRITE, 1,
-                                    &xenstore_pfn, NULL);
+                                    xenstore_pfn, NULL);
         if (!intf) {
             printf("Error mapping xenstore page\n");
             return 1;
@@ -282,16 +282,37 @@ static int init_domain(struct xs_handle *xsh,
 
         /* Now everything is ready: set HVM_PARAM_STORE_PFN */
         rc = xc_hvm_param_set(xch, info->domid, HVM_PARAM_STORE_PFN,
-                xenstore_pfn);
+                              *xenstore_pfn);
         if (rc < 0)
             return rc;
 
         rc = xc_dom_gnttab_seed(xch, info->domid, true,
-                                (xen_pfn_t)-1, xenstore_pfn, 0, 0);
+                                (xen_pfn_t)-1, *xenstore_pfn, 0, 0);
         if (rc)
                err(1, "xc_dom_gnttab_seed");
     }
 
+    return 0;
+}
+
+static int init_domain(struct xs_handle *xsh,
+                       struct xc_interface_core *xch,
+                       xenforeignmemory_handle *xfh,
+                       libxl_dominfo *info)
+{
+    uint64_t xenstore_evtchn, xenstore_pfn = 0;
+    libxl_uuid uuid;
+    int rc;
+
+    rc = configure_xenstore(xsh, xch, xfh, info, &xenstore_evtchn,
+                            &xenstore_pfn);
+    if (rc)
+        return rc;
+
+    if (xenstore_evtchn == 0) {
+        return 0;
+    }
+
     libxl_uuid_generate(&uuid);
     xc_domain_sethandle(xch, info->domid, libxl_uuid_bytearray(&uuid));
 
-- 
2.50.0
Re: [PATCH v2 15/17] tools/init-dom0less: Factor out xenstore setup
Posted by Juergen Gross 3 months, 2 weeks ago
On 16.07.25 23:15, Jason Andryuk wrote:
> Factor out the xenstore setup code into configure_xenstore().  This is
> in preparation for handling already-introduced domains.
> 
> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
> ---
>   tools/helpers/init-dom0less.c | 51 ++++++++++++++++++++++++-----------
>   1 file changed, 36 insertions(+), 15 deletions(-)
> 
> diff --git a/tools/helpers/init-dom0less.c b/tools/helpers/init-dom0less.c
> index a182dce563..6ae7cf2e7e 100644
> --- a/tools/helpers/init-dom0less.c
> +++ b/tools/helpers/init-dom0less.c
> @@ -235,43 +235,43 @@ err:
>       return rc;
>   }
>   
> -static int init_domain(struct xs_handle *xsh,
> -                       struct xc_interface_core *xch,
> -                       xenforeignmemory_handle *xfh,
> -                       libxl_dominfo *info)
> +static int configure_xenstore(struct xs_handle *xsh,
> +                              struct xc_interface_core *xch,
> +                              xenforeignmemory_handle *xfh,
> +                              libxl_dominfo *info,
> +                              uint64_t *xenstore_evtchn,
> +                              uint64_t *xenstore_pfn)

This is becoming a little bit convoluted.

Wouldn't it be better to have a struct containing most of the parameters
(at least the handles and info)?

An alternative might be to make those global variables in order to avoid
passing them around everywhere.


Juergen
Re: [PATCH v2 15/17] tools/init-dom0less: Factor out xenstore setup
Posted by Jason Andryuk 3 months, 2 weeks ago
On 2025-07-17 06:33, Juergen Gross wrote:
> On 16.07.25 23:15, Jason Andryuk wrote:
>> Factor out the xenstore setup code into configure_xenstore().  This is
>> in preparation for handling already-introduced domains.
>>
>> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
>> ---
>>   tools/helpers/init-dom0less.c | 51 ++++++++++++++++++++++++-----------
>>   1 file changed, 36 insertions(+), 15 deletions(-)
>>
>> diff --git a/tools/helpers/init-dom0less.c b/tools/helpers/init- 
>> dom0less.c
>> index a182dce563..6ae7cf2e7e 100644
>> --- a/tools/helpers/init-dom0less.c
>> +++ b/tools/helpers/init-dom0less.c
>> @@ -235,43 +235,43 @@ err:
>>       return rc;
>>   }
>> -static int init_domain(struct xs_handle *xsh,
>> -                       struct xc_interface_core *xch,
>> -                       xenforeignmemory_handle *xfh,
>> -                       libxl_dominfo *info)
>> +static int configure_xenstore(struct xs_handle *xsh,
>> +                              struct xc_interface_core *xch,
>> +                              xenforeignmemory_handle *xfh,
>> +                              libxl_dominfo *info,
>> +                              uint64_t *xenstore_evtchn,
>> +                              uint64_t *xenstore_pfn)
> 
> This is becoming a little bit convoluted.
> 
> Wouldn't it be better to have a struct containing most of the parameters
> (at least the handles and info)?
> 
> An alternative might be to make those global variables in order to avoid
> passing them around everywhere.

Yes, I'd be happy with either of those options.

Thanks,
Jason