[PATCH 09/11] tools/libxl: add support for xenstore quota in domain_config

Juergen Gross posted 11 patches 1 month, 1 week ago
There is a newer version of this series
[PATCH 09/11] tools/libxl: add support for xenstore quota in domain_config
Posted by Juergen Gross 1 month, 1 week ago
Add support for xenstore quota in the struct domain_config. Initially
it will be used only for migration of a domain.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 tools/golang/xenlight/helpers.gen.go |  6 ++++++
 tools/golang/xenlight/types.gen.go   |  1 +
 tools/libs/light/libxl_dom.c         |  8 ++++++++
 tools/libs/light/libxl_domain.c      | 10 ++++++++++
 tools/libs/light/libxl_types.idl     |  1 +
 5 files changed, 26 insertions(+)

diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index 6c9af904c5..416c2d3e07 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -1286,6 +1286,9 @@ if err := x.TrapUnmappedAccesses.fromC(&xc.trap_unmapped_accesses);err != nil {
 return fmt.Errorf("converting field TrapUnmappedAccesses: %v", err)
 }
 x.XenstoreFeatureMask = uint32(xc.xenstore_feature_mask)
+if err := x.XenstoreQuota.fromC(&xc.xenstore_quota);err != nil {
+return fmt.Errorf("converting field XenstoreQuota: %v", err)
+}
 
  return nil}
 
@@ -1825,6 +1828,9 @@ if err := x.TrapUnmappedAccesses.toC(&xc.trap_unmapped_accesses); err != nil {
 return fmt.Errorf("converting field TrapUnmappedAccesses: %v", err)
 }
 xc.xenstore_feature_mask = C.uint32_t(x.XenstoreFeatureMask)
+if err := x.XenstoreQuota.toC(&xc.xenstore_quota); err != nil {
+return fmt.Errorf("converting field XenstoreQuota: %v", err)
+}
 
  return nil
  }
diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
index 5393277190..7e7292cf70 100644
--- a/tools/golang/xenlight/types.gen.go
+++ b/tools/golang/xenlight/types.gen.go
@@ -629,6 +629,7 @@ VmtraceBufKb int
 Vpmu Defbool
 TrapUnmappedAccesses Defbool
 XenstoreFeatureMask uint32
+XenstoreQuota XsQuotaSet
 }
 
 type DomainBuildInfoTypeUnion interface {
diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c
index 05ebc69534..1c0689d7ff 100644
--- a/tools/libs/light/libxl_dom.c
+++ b/tools/libs/light/libxl_dom.c
@@ -509,6 +509,14 @@ retry_transaction:
 
     xs_introduce_domain(ctx->xsh, domid, state->store_mfn, state->store_port);
 
+    if (info->xenstore_quota.num_quota) {
+        rc = libxl_xsquota_domain_set(ctx, domid, &info->xenstore_quota);
+        if (rc) {
+            LOGED(ERROR, domid, "Failed to set Xenstore quota");
+            goto out;
+        }
+    }
+
  out:
     free(vm_path);
     return rc;
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 5be47f687f..86e43e7133 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -2533,6 +2533,16 @@ static void retrieve_domain_configuration_end(libxl__egc *egc,
         }
     }
 
+    /* Xenstore quota */
+    {
+        libxl_xs_quota_set_dispose(&d_config->b_info.xenstore_quota);
+        rc = libxl_xsquota_domain_get(CTX, domid, &d_config->b_info.xenstore_quota);
+        if (rc) {
+            LOGD(ERROR, domid, "Fail to get xenstore quota");
+            goto out;
+        }
+    }
+
     /* Devices: disk, nic, vtpm, pcidev etc. */
 
     /* The MERGE macro implements following logic:
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index c5ddc40f35..ee8f89e462 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -760,6 +760,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
     ("vpmu", libxl_defbool),
     ("trap_unmapped_accesses", libxl_defbool),
     ("xenstore_feature_mask", uint32, {'init_val': '~0U'}),
+    ("xenstore_quota", libxl_xs_quota_set),
 
     ], dir=DIR_IN,
        copy_deprecated_fn="libxl__domain_build_info_copy_deprecated",
-- 
2.53.0
Re: [PATCH 09/11] tools/libxl: add support for xenstore quota in domain_config
Posted by Anthony PERARD 3 weeks, 3 days ago
On Thu, Mar 05, 2026 at 02:52:06PM +0100, Juergen Gross wrote:
> diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
> index 5be47f687f..86e43e7133 100644
> --- a/tools/libs/light/libxl_domain.c
> +++ b/tools/libs/light/libxl_domain.c
> @@ -2533,6 +2533,16 @@ static void retrieve_domain_configuration_end(libxl__egc *egc,
>          }
>      }
>  
> +    /* Xenstore quota */
> +    {
> +        libxl_xs_quota_set_dispose(&d_config->b_info.xenstore_quota);
> +        rc = libxl_xsquota_domain_get(CTX, domid, &d_config->b_info.xenstore_quota);
> +        if (rc) {
> +            LOGD(ERROR, domid, "Fail to get xenstore quota");

It would be useful to print "errno" with LOGED, right?

> +            goto out;
> +        }
> +    }
> +
>      /* Devices: disk, nic, vtpm, pcidev etc. */
>  
>      /* The MERGE macro implements following logic:
> diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
> index c5ddc40f35..ee8f89e462 100644
> --- a/tools/libs/light/libxl_types.idl
> +++ b/tools/libs/light/libxl_types.idl
> @@ -760,6 +760,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>      ("vpmu", libxl_defbool),
>      ("trap_unmapped_accesses", libxl_defbool),
>      ("xenstore_feature_mask", uint32, {'init_val': '~0U'}),
> +    ("xenstore_quota", libxl_xs_quota_set),

This would deserve a new LIBXL_HAVE_ macro, or a mention about the new
field in the macro added in the previous patch.

Thanks,


--
Anthony Perard | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech
Re: [PATCH 09/11] tools/libxl: add support for xenstore quota in domain_config
Posted by Jürgen Groß 3 weeks, 3 days ago
On 19.03.26 10:26, Anthony PERARD wrote:
> On Thu, Mar 05, 2026 at 02:52:06PM +0100, Juergen Gross wrote:
>> diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
>> index 5be47f687f..86e43e7133 100644
>> --- a/tools/libs/light/libxl_domain.c
>> +++ b/tools/libs/light/libxl_domain.c
>> @@ -2533,6 +2533,16 @@ static void retrieve_domain_configuration_end(libxl__egc *egc,
>>           }
>>       }
>>   
>> +    /* Xenstore quota */
>> +    {
>> +        libxl_xs_quota_set_dispose(&d_config->b_info.xenstore_quota);
>> +        rc = libxl_xsquota_domain_get(CTX, domid, &d_config->b_info.xenstore_quota);
>> +        if (rc) {
>> +            LOGD(ERROR, domid, "Fail to get xenstore quota");
> 
> It would be useful to print "errno" with LOGED, right?

Okay.

> 
>> +            goto out;
>> +        }
>> +    }
>> +
>>       /* Devices: disk, nic, vtpm, pcidev etc. */
>>   
>>       /* The MERGE macro implements following logic:
>> diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
>> index c5ddc40f35..ee8f89e462 100644
>> --- a/tools/libs/light/libxl_types.idl
>> +++ b/tools/libs/light/libxl_types.idl
>> @@ -760,6 +760,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>>       ("vpmu", libxl_defbool),
>>       ("trap_unmapped_accesses", libxl_defbool),
>>       ("xenstore_feature_mask", uint32, {'init_val': '~0U'}),
>> +    ("xenstore_quota", libxl_xs_quota_set),
> 
> This would deserve a new LIBXL_HAVE_ macro, or a mention about the new
> field in the macro added in the previous patch.

I'll do the latter.


Thanks,

Juergen
Re: [PATCH 09/11] tools/libxl: add support for xenstore quota in domain_config
Posted by Nick Rosbrook 1 month ago
On Thu, Mar 5, 2026 at 8:53 AM Juergen Gross <jgross@suse.com> wrote:
>
> Add support for xenstore quota in the struct domain_config. Initially
> it will be used only for migration of a domain.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
>  tools/golang/xenlight/helpers.gen.go |  6 ++++++
>  tools/golang/xenlight/types.gen.go   |  1 +
>  tools/libs/light/libxl_dom.c         |  8 ++++++++
>  tools/libs/light/libxl_domain.c      | 10 ++++++++++
>  tools/libs/light/libxl_types.idl     |  1 +
>  5 files changed, 26 insertions(+)
>
> diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
> index 6c9af904c5..416c2d3e07 100644
> --- a/tools/golang/xenlight/helpers.gen.go
> +++ b/tools/golang/xenlight/helpers.gen.go
> @@ -1286,6 +1286,9 @@ if err := x.TrapUnmappedAccesses.fromC(&xc.trap_unmapped_accesses);err != nil {
>  return fmt.Errorf("converting field TrapUnmappedAccesses: %v", err)
>  }
>  x.XenstoreFeatureMask = uint32(xc.xenstore_feature_mask)
> +if err := x.XenstoreQuota.fromC(&xc.xenstore_quota);err != nil {
> +return fmt.Errorf("converting field XenstoreQuota: %v", err)
> +}
>
>   return nil}
>
> @@ -1825,6 +1828,9 @@ if err := x.TrapUnmappedAccesses.toC(&xc.trap_unmapped_accesses); err != nil {
>  return fmt.Errorf("converting field TrapUnmappedAccesses: %v", err)
>  }
>  xc.xenstore_feature_mask = C.uint32_t(x.XenstoreFeatureMask)
> +if err := x.XenstoreQuota.toC(&xc.xenstore_quota); err != nil {
> +return fmt.Errorf("converting field XenstoreQuota: %v", err)
> +}
>
>   return nil
>   }
> diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
> index 5393277190..7e7292cf70 100644
> --- a/tools/golang/xenlight/types.gen.go
> +++ b/tools/golang/xenlight/types.gen.go
> @@ -629,6 +629,7 @@ VmtraceBufKb int
>  Vpmu Defbool
>  TrapUnmappedAccesses Defbool
>  XenstoreFeatureMask uint32
> +XenstoreQuota XsQuotaSet
>  }
>
>  type DomainBuildInfoTypeUnion interface {

For the golang stuff:

Acked-by: Nick Rosbrook <enr0n@ubuntu.com