|
[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 1323873285 0
# Node ID a4a5697297410d0d71adb5e96bee5ae061850310
# 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 a4a569729741 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 Wed Dec 14 14:34:45 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 a4a569729741 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 Wed Dec 14 14:34:45 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 |