[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1 of 3] Make ro_paths and rw_paths dynamic
# HG changeset patch # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1324035832 0 # Node ID 24fc8670dfcaa9cbdfd89532823b68feb96ca2eb # Parent 03138a08366b895d79e143119d4c9c72833cdbcd Make ro_paths and rw_paths dynamic. The paths need to be different for the HVM and non-HVM cases as, in the HVM case, we need an 'hvmloader' key. This was previously handled by creating the hvmloader key in libxl__create_device_model(), which is only invoked for HVM guests. However, if we are to use the hvmloader key to parent the 'generation-id-address' key, the creation needs to move earlier in the sequence. Handling this by making ro_paths and rw_paths dynamic in libxl__domain_make() seems like the cleanest approach. The read-only 'error', 'drivers', 'attr' and 'messages' keys are no longer created as they seem to be completely unused. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> diff -r 03138a08366b -r 24fc8670dfca tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c Fri Dec 09 16:19:36 2011 +0000 +++ b/tools/libxl/libxl_create.c Fri Dec 16 11:43:52 2011 +0000 @@ -322,9 +322,10 @@ int libxl__domain_make(libxl__gc *gc, li libxl_ctx *ctx = libxl__gc_owner(gc); int flags, ret, i, rc; char *uuid_string; - char *rw_paths[] = { "control/shutdown", "device", "device/suspend/event-channel" , "data"}; - char *ro_paths[] = { "cpu", "memory", "device", "error", "drivers", - "control", "attr", "messages" }; + char **ro_paths; + int nr_ro_paths; + char **rw_paths; + int nr_rw_paths; char *dom_path, *vm_path, *libxl_path; struct xs_permissions roperm[2]; struct xs_permissions rwperm[1]; @@ -341,6 +342,31 @@ int libxl__domain_make(libxl__gc *gc, li goto out; } + nr_ro_paths = 0; + if (info->type == LIBXL_DOMAIN_TYPE_HVM) { + ro_paths = libxl__calloc(gc, 5, sizeof(char *)); + ro_paths[nr_ro_paths++] = "hvmloader"; + } else { + ro_paths = libxl__calloc(gc, 4, sizeof(char *)); + } + + ro_paths[nr_ro_paths++] = "cpu"; + ro_paths[nr_ro_paths++] = "memory"; + ro_paths[nr_ro_paths++] = "device"; + ro_paths[nr_ro_paths++] = "control"; + + nr_rw_paths = 0; + if (info->type == LIBXL_DOMAIN_TYPE_HVM) { + rw_paths = libxl__calloc(gc, 4, sizeof(char *)); + rw_paths[nr_rw_paths++] = "hvmloader/generation-id-address"; + } else { + rw_paths = libxl__calloc(gc, 3, sizeof(char *)); + } + + rw_paths[nr_rw_paths++] = "control/shutdown"; + rw_paths[nr_rw_paths++] = "device/suspend/event-channel"; + rw_paths[nr_rw_paths++] = "data"; + flags = 0; if (info->type == LIBXL_DOMAIN_TYPE_HVM) { flags |= XEN_DOMCTL_CDF_hvm_guest; @@ -414,16 +440,16 @@ retry_transaction: if (rc) goto out; - for (i = 0; i < ARRAY_SIZE(rw_paths); i++) { - char *path = libxl__sprintf(gc, "%s/%s", dom_path, rw_paths[i]); - xs_mkdir(ctx->xsh, t, path); - xs_set_permissions(ctx->xsh, t, path, rwperm, ARRAY_SIZE(rwperm)); - } for (i = 0; i < ARRAY_SIZE(ro_paths); i++) { char *path = libxl__sprintf(gc, "%s/%s", dom_path, ro_paths[i]); xs_mkdir(ctx->xsh, t, path); xs_set_permissions(ctx->xsh, t, path, roperm, ARRAY_SIZE(roperm)); } + for (i = 0; i < nr_rw_paths; i++) { + char *path = libxl__sprintf(gc, "%s/%s", dom_path, rw_paths[i]); + xs_mkdir(ctx->xsh, t, path); + xs_set_permissions(ctx->xsh, t, path, rwperm, ARRAY_SIZE(rwperm)); + } xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/uuid", vm_path), uuid_string, strlen(uuid_string)); xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/name", vm_path), info->name, strlen(info->name)); diff -r 03138a08366b -r 24fc8670dfca tools/libxl/libxl_dm.c --- a/tools/libxl/libxl_dm.c Fri Dec 09 16:19:36 2011 +0000 +++ b/tools/libxl/libxl_dm.c Fri Dec 16 11:43:52 2011 +0000 @@ -821,9 +821,7 @@ int libxl__create_device_model(libxl__gc goto out; } - path = libxl__sprintf(gc, "/local/domain/%d/hvmloader", info->domid); - xs_mkdir(ctx->xsh, XBT_NULL, path); - libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/bios", path), + libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "/local/domain/%d/hvmloader/bios", info->domid), "%s", libxl__domain_bios(gc, info)); path = libxl__sprintf(gc, "/local/domain/0/device-model/%d", info->domid); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |