@@ -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);
@@ -151,8 +151,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;
}
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-<cpupool id>. Given the change, remove the check for poolid == 0 from libxl_cpupoolid_to_name(...). Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> --- Changes in v6: - Reworked loop to have only one error path (Anthony) Changes in v5: - no changes Changes in v4: - no changes Changes in v3: - no changes, add R-by Changes in v2: - Remove unused variable, moved xc_cpupool_infofree ahead to simplify the code, use asprintf (Juergen) --- tools/helpers/xen-init-dom0.c | 37 +++++++++++++++++++++++++++++++++- tools/libs/light/libxl_utils.c | 3 +-- 2 files changed, 37 insertions(+), 3 deletions(-)