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
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
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
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
© 2016 - 2026 Red Hat, Inc.