From: Luca Fancellu Date: Fri, 6 May 2022 12:00:06 +0000 (+0100) Subject: tools/cpupools: Give a name to unnamed cpupools X-Git-Tag: archive/raspbian/4.17.0-1+rpi1^2~33^2~660 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5b9647f771ce0a80c4de4eeaa55f6cf07a5d1f64;p=xen.git tools/cpupools: Give a name to unnamed cpupools With the introduction of boot time cpupools, Xen can create many different cpupools at boot time other than cpupool with id 0. Since these newly created cpupools can't have an entry in Xenstore, create the entry using xen-init-dom0 helper with the usual convention: Pool-. Given the change, remove the check for poolid == 0 from libxl_cpupoolid_to_name(...). Signed-off-by: Luca Fancellu Reviewed-by: Anthony PERARD --- diff --git a/tools/helpers/xen-init-dom0.c b/tools/helpers/xen-init-dom0.c index c99224a4b6..37eff8868f 100644 --- a/tools/helpers/xen-init-dom0.c +++ b/tools/helpers/xen-init-dom0.c @@ -43,7 +43,10 @@ int main(int argc, char **argv) int rc; struct xs_handle *xsh = NULL; xc_interface *xch = NULL; - char *domname_string = NULL, *domid_string = NULL; + char *domname_string = NULL, *domid_string = NULL, + *pool_path = NULL, *pool_name = NULL; + xc_cpupoolinfo_t *xcinfo; + unsigned int pool_id = 0; libxl_uuid uuid; /* Accept 0 or 1 argument */ @@ -114,9 +117,41 @@ int main(int argc, char **argv) goto out; } + /* Create an entry in xenstore for each cpupool on the system */ + do { + xcinfo = xc_cpupool_getinfo(xch, pool_id); + if (xcinfo != NULL) { + if (xcinfo->cpupool_id != pool_id) + pool_id = xcinfo->cpupool_id; + xc_cpupool_infofree(xch, xcinfo); + if (asprintf(&pool_path, "/local/pool/%d/name", pool_id) <= 0) { + fprintf(stderr, "cannot allocate memory for pool path\n"); + rc = 1; + goto out; + } + if (asprintf(&pool_name, "Pool-%d", pool_id) <= 0) { + fprintf(stderr, "cannot allocate memory for pool name\n"); + rc = 1; + goto out; + } + pool_id++; + if (!xs_write(xsh, XBT_NULL, pool_path, pool_name, + strlen(pool_name))) { + fprintf(stderr, "cannot set pool name\n"); + rc = 1; + goto out; + } + free(pool_name); + free(pool_path); + pool_path = pool_name = NULL; + } + } while(xcinfo != NULL); + printf("Done setting up Dom0\n"); out: + free(pool_path); + free(pool_name); free(domid_string); free(domname_string); xs_close(xsh); diff --git a/tools/libs/light/libxl_utils.c b/tools/libs/light/libxl_utils.c index 1d8a7f64ef..e5e6b2da96 100644 --- a/tools/libs/light/libxl_utils.c +++ b/tools/libs/light/libxl_utils.c @@ -146,8 +146,7 @@ char *libxl_cpupoolid_to_name(libxl_ctx *ctx, uint32_t poolid) snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); s = xs_read(ctx->xsh, XBT_NULL, path, &len); - if (!s && (poolid == 0)) - return strdup("Pool-0"); + return s; }