aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-01-31 16:34:32 +0000
committerIan Campbell <ian.campbell@citrix.com>2012-01-31 16:34:32 +0000
commit72efe9e92468bcc2779064c6d32ee1c70a943f0f (patch)
tree1164adfb646e09a4c2dd4448f6b09c920a0e4c65 /tools
parente08baad6ae73b552bfbfc880cba58fed91da2568 (diff)
downloadxen-72efe9e92468bcc2779064c6d32ee1c70a943f0f.tar.gz
xen-72efe9e92468bcc2779064c6d32ee1c70a943f0f.tar.bz2
xen-72efe9e92468bcc2779064c6d32ee1c70a943f0f.zip
libxl: move device model selection variables to b_info.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/libxl/libxl.c2
-rw-r--r--tools/libxl/libxl_create.c23
-rw-r--r--tools/libxl/libxl_dm.c57
-rw-r--r--tools/libxl/libxl_dom.c4
-rw-r--r--tools/libxl/libxl_internal.h2
-rw-r--r--tools/libxl/libxl_types.idl23
-rw-r--r--tools/libxl/xl_cmdimpl.c14
7 files changed, 65 insertions, 60 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 5bd7a1e9b7..86f30c4669 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2629,7 +2629,7 @@ int libxl_domain_need_memory(libxl_ctx *ctx, libxl_domain_build_info *b_info,
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
*need_memkb += b_info->shadow_memkb + LIBXL_HVM_EXTRA_MEMORY;
- if (dm_info->device_model_stubdomain)
+ if (b_info->device_model_stubdomain)
*need_memkb += 32 * 1024;
break;
case LIBXL_DOMAIN_TYPE_PV:
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 01e882f6f5..4b358b08e9 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -80,6 +80,12 @@ int libxl_init_build_info(libxl_ctx *ctx,
b_info->cpuid = NULL;
b_info->shadow_memkb = 0;
b_info->type = c_info->type;
+
+ b_info->device_model_version =
+ LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
+ b_info->device_model_stubdomain = false;
+ b_info->device_model = NULL;
+
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
b_info->video_memkb = 8 * 1024;
@@ -131,9 +137,6 @@ int libxl_init_dm_info(libxl_ctx *ctx,
{
memset(dm_info, '\0', sizeof(*dm_info));
- dm_info->device_model_version = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
- dm_info->device_model_stubdomain = false;
- dm_info->device_model = NULL;
return 0;
}
@@ -459,14 +462,14 @@ retry_transaction:
}
static int store_libxl_entry(libxl__gc *gc, uint32_t domid,
- libxl_device_model_info *dm_info)
+ libxl_domain_build_info *b_info)
{
char *path = NULL;
path = libxl__xs_libxl_path(gc, domid);
path = libxl__sprintf(gc, "%s/dm-version", path);
return libxl__xs_write(gc, XBT_NULL, path, "%s",
- libxl_device_model_version_to_string(dm_info->device_model_version));
+ libxl_device_model_version_to_string(b_info->device_model_version));
}
static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
@@ -525,7 +528,7 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
goto error_out;
}
- store_libxl_entry(gc, domid, dm_info);
+ store_libxl_entry(gc, domid, &d_config->b_info);
for (i = 0; i < d_config->num_disks; i++) {
ret = libxl_device_disk_add(ctx, domid, &d_config->disks[i]);
@@ -601,12 +604,6 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
if (need_qemu) {
/* only copy those useful configs */
memset((void*)&xenpv_dm_info, 0, sizeof(libxl_device_model_info));
- xenpv_dm_info.device_model_version =
- d_config->dm_info.device_model_version;
- xenpv_dm_info.device_model = d_config->dm_info.device_model;
- xenpv_dm_info.extra = d_config->dm_info.extra;
- xenpv_dm_info.extra_pv = d_config->dm_info.extra_pv;
- xenpv_dm_info.extra_hvm = d_config->dm_info.extra_hvm;
libxl__create_xenpv_qemu(gc, domid,
d_config, &xenpv_dm_info, &dm_starting);
@@ -619,7 +616,7 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
}
if (dm_starting) {
- if (dm_info->device_model_version
+ if (d_config->b_info.device_model_version
== LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
libxl__qmp_initializations(ctx, domid);
}
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 116cd10222..5bba931315 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -34,7 +34,7 @@ const char *libxl__device_model_savefile(libxl__gc *gc, uint32_t domid)
}
const char *libxl__domain_device_model(libxl__gc *gc,
- libxl_device_model_info *info)
+ const libxl_domain_build_info *info)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
const char *dm;
@@ -64,7 +64,7 @@ const char *libxl__domain_device_model(libxl__gc *gc,
}
static const char *libxl__domain_bios(libxl__gc *gc,
- libxl_device_model_info *info)
+ const libxl_domain_build_info *info)
{
switch (info->device_model_version) {
case 1: return "rombios";
@@ -251,19 +251,19 @@ static char ** libxl__build_device_model_args_old(libxl__gc *gc,
if (info->saved_state) {
flexarray_vappend(dm_args, "-loadvm", info->saved_state, NULL);
}
- for (i = 0; info->extra && info->extra[i] != NULL; i++)
- flexarray_append(dm_args, info->extra[i]);
+ for (i = 0; b_info->extra && b_info->extra[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra[i]);
flexarray_append(dm_args, "-M");
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_PV:
flexarray_append(dm_args, "xenpv");
- for (i = 0; info->extra_pv && info->extra_pv[i] != NULL; i++)
- flexarray_append(dm_args, info->extra_pv[i]);
+ for (i = 0; b_info->extra_pv && b_info->extra_pv[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra_pv[i]);
break;
case LIBXL_DOMAIN_TYPE_HVM:
flexarray_append(dm_args, "xenfv");
- for (i = 0; info->extra_hvm && info->extra_hvm[i] != NULL; i++)
- flexarray_append(dm_args, info->extra_hvm[i]);
+ for (i = 0; b_info->extra_hvm && b_info->extra_hvm[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra_hvm[i]);
break;
}
flexarray_append(dm_args, NULL);
@@ -495,19 +495,19 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc,
flexarray_append(dm_args, "-incoming");
flexarray_append(dm_args, libxl__sprintf(gc, "fd:%d", migration_fd));
}
- for (i = 0; info->extra && info->extra[i] != NULL; i++)
- flexarray_append(dm_args, info->extra[i]);
+ for (i = 0; b_info->extra && b_info->extra[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra[i]);
flexarray_append(dm_args, "-M");
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_PV:
flexarray_append(dm_args, "xenpv");
- for (i = 0; info->extra_pv && info->extra_pv[i] != NULL; i++)
- flexarray_append(dm_args, info->extra_pv[i]);
+ for (i = 0; b_info->extra_pv && b_info->extra_pv[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra_pv[i]);
break;
case LIBXL_DOMAIN_TYPE_HVM:
flexarray_append(dm_args, "xenfv");
- for (i = 0; info->extra_hvm && info->extra_hvm[i] != NULL; i++)
- flexarray_append(dm_args, info->extra_hvm[i]);
+ for (i = 0; b_info->extra_hvm && b_info->extra_hvm[i] != NULL; i++)
+ flexarray_append(dm_args, b_info->extra_hvm[i]);
break;
}
@@ -585,14 +585,14 @@ static char ** libxl__build_device_model_args(libxl__gc *gc,
{
libxl_ctx *ctx = libxl__gc_owner(gc);
- switch (info->device_model_version) {
+ switch (guest_config->b_info.device_model_version) {
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
return libxl__build_device_model_args_old(gc, dm, guest_config, info);
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
return libxl__build_device_model_args_new(gc, dm, guest_config, info);
default:
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unknown device model version %d",
- info->device_model_version);
+ guest_config->b_info.device_model_version);
return NULL;
}
}
@@ -688,7 +688,8 @@ static int libxl__create_stubdom(libxl__gc *gc,
libxl__spawner_starting *dm_starting = 0;
libxl_device_model_info xenpv_dm_info;
- if (info->device_model_version != LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL) {
+ if (guest_config->b_info.device_model_version !=
+ LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL) {
ret = ERROR_INVAL;
goto out;
}
@@ -712,6 +713,14 @@ static int libxl__create_stubdom(libxl__gc *gc,
dm_config.b_info.u.pv.ramdisk.path = "";
dm_config.b_info.u.pv.features = "";
+ dm_config.b_info.device_model_version =
+ guest_config->b_info.device_model_version;
+ dm_config.b_info.device_model =
+ guest_config->b_info.device_model;
+ dm_config.b_info.extra = guest_config->b_info.extra;
+ dm_config.b_info.extra_pv = guest_config->b_info.extra_pv;
+ dm_config.b_info.extra_hvm = guest_config->b_info.extra_hvm;
+
dm_config.disks = guest_config->disks;
dm_config.num_disks = guest_config->num_disks;
@@ -828,11 +837,6 @@ retry_transaction:
}
memset((void*)&xenpv_dm_info, 0, sizeof(libxl_device_model_info));
- xenpv_dm_info.device_model_version = info->device_model_version;
- xenpv_dm_info.device_model = info->device_model;
- xenpv_dm_info.extra = info->extra;
- xenpv_dm_info.extra_pv = info->extra_pv;
- xenpv_dm_info.extra_hvm = info->extra_hvm;
if (libxl__create_xenpv_qemu(gc, domid,
&dm_config,
@@ -871,6 +875,7 @@ int libxl__create_device_model(libxl__gc *gc,
{
libxl_ctx *ctx = libxl__gc_owner(gc);
const libxl_domain_create_info *c_info = &guest_config->c_info;
+ const libxl_domain_build_info *b_info = &guest_config->b_info;
const libxl_vnc_info *vnc = dm_vnc(guest_config, info);
char *path, *logfile;
int logfile_w, null;
@@ -882,12 +887,12 @@ int libxl__create_device_model(libxl__gc *gc,
char **pass_stuff;
const char *dm;
- if (info->device_model_stubdomain) {
+ if (b_info->device_model_stubdomain) {
rc = libxl__create_stubdom(gc, guest_config, info, starting_r);
goto out;
}
- dm = libxl__domain_device_model(gc, info);
+ dm = libxl__domain_device_model(gc, b_info);
if (!dm) {
rc = ERROR_FAIL;
goto out;
@@ -906,13 +911,13 @@ int libxl__create_device_model(libxl__gc *gc,
path = xs_get_domain_path(ctx->xsh, info->domid);
libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/hvmloader/bios", path),
- "%s", libxl__domain_bios(gc, info));
+ "%s", libxl__domain_bios(gc, b_info));
free(path);
path = libxl__sprintf(gc, "/local/domain/0/device-model/%d", info->domid);
xs_mkdir(ctx->xsh, XBT_NULL, path);
libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/disable_pf", path),
- "%d", !guest_config->b_info.u.hvm.xen_platform_pci);
+ "%d", !b_info->u.hvm.xen_platform_pci);
libxl_create_logfile(ctx,
libxl__sprintf(gc, "qemu-dm-%s", c_info->name),
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index 06aa2e3898..c88ecd743a 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -300,7 +300,7 @@ static const char *libxl__domain_firmware(libxl__gc *gc,
if (info->u.hvm.firmware)
firmware = info->u.hvm.firmware;
else {
- switch (dm_info->device_model_version)
+ switch (info->device_model_version)
{
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
firmware = "hvmloader";
@@ -310,7 +310,7 @@ static const char *libxl__domain_firmware(libxl__gc *gc,
break;
default:
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "invalid device model version %d",
- dm_info->device_model_version);
+ info->device_model_version);
return NULL;
break;
}
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 8551edcca5..cb40a9b635 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -864,7 +864,7 @@ _hidden int libxl__domain_build(libxl__gc *gc,
/* for device model creation */
_hidden const char *libxl__domain_device_model(libxl__gc *gc,
- libxl_device_model_info *info);
+ const libxl_domain_build_info *info);
_hidden int libxl__create_device_model(libxl__gc *gc,
libxl_domain_config *guest_config,
libxl_device_model_info *info,
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 09ca35c155..41524d1cd1 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -200,6 +200,19 @@ libxl_domain_build_info = Struct("domain_build_info",[
("disable_migrate", bool),
("cpuid", libxl_cpuid_policy_list),
("type", libxl_domain_type),
+
+ ("device_model_version", libxl_device_model_version),
+ ("device_model_stubdomain", bool),
+ # you set device_model you must set device_model_version too
+ ("device_model", string),
+
+ # extra parameters pass directly to qemu, NULL terminated
+ ("extra", libxl_string_list),
+ # extra parameters pass directly to qemu for PV guest, NULL terminated
+ ("extra_pv", libxl_string_list),
+ # extra parameters pass directly to qemu for HVM guest, NULL terminated
+ ("extra_hvm", libxl_string_list),
+
("u", KeyedUnion(None, libxl_domain_type, "type",
[("hvm", Struct(None, [("firmware", string),
("pae", bool),
@@ -253,17 +266,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
libxl_device_model_info = Struct("device_model_info",[
("domid", libxl_domid),
- ("device_model_version", libxl_device_model_version),
- ("device_model_stubdomain", bool),
- # you set device_model you must set device_model_version too
- ("device_model", string),
("saved_state", string),
- # extra parameters pass directly to qemu, NULL terminated
- ("extra", libxl_string_list),
- # extra parameters pass directly to qemu for PV guest, NULL terminated
- ("extra_pv", libxl_string_list),
- # extra parameters pass directly to qemu for HVM guest, NULL terminated
- ("extra_hvm", libxl_string_list),
],
)
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 9eff71208b..5989c9b913 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -381,7 +381,7 @@ static void printf_info(int domid,
b_info->u.hvm.spice.disable_ticketing);
printf("\t\t\t(spiceagent_mouse %d)\n", b_info->u.hvm.spice.agent_mouse);
- printf("\t\t\t(device_model %s)\n", dm_info->device_model ? : "default");
+ printf("\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
printf("\t\t\t(gfx_passthru %d)\n", b_info->u.hvm.gfx_passthru);
printf("\t\t\t(serial %s)\n", b_info->u.hvm.serial);
printf("\t\t\t(boot %s)\n", b_info->u.hvm.boot);
@@ -1217,27 +1217,27 @@ skip_vfb:
xlu_cfg_replace_string (config, "device_model_override",
- &dm_info->device_model, 0);
+ &b_info->device_model, 0);
if (!xlu_cfg_get_string (config, "device_model_version", &buf, 0)) {
if (!strcmp(buf, "qemu-xen-traditional")) {
- dm_info->device_model_version
+ b_info->device_model_version
= LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
} else if (!strcmp(buf, "qemu-xen")) {
- dm_info->device_model_version
+ b_info->device_model_version
= LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN;
} else {
fprintf(stderr,
"Unknown device_model_version \"%s\" specified\n", buf);
exit(1);
}
- } else if (dm_info->device_model)
+ } else if (b_info->device_model)
fprintf(stderr, "WARNING: device model override given without specific DM version\n");
if (!xlu_cfg_get_long (config, "device_model_stubdomain_override", &l, 0))
- dm_info->device_model_stubdomain = l;
+ b_info->device_model_stubdomain = l;
#define parse_extra_args(type) \
e = xlu_cfg_get_list_as_string_list(config, "device_model_args"#type, \
- &dm_info->extra##type, 0); \
+ &b_info->extra##type, 0); \
if (e && e != ESRCH) { \
fprintf(stderr,"xl: Unable to parse device_model_args"#type".\n");\
exit(-ERROR_FAIL); \