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 <[email protected]> --- 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
