aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:15 +0000
committerIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:15 +0000
commit40efe5366816c6147344fd10902b4c0062980da7 (patch)
tree7d0184eb77c7bcf8a37e893c1649976e202840f5 /tools
parent88e865b7a63801aaf89ea8125fae9732c0f9abfd (diff)
downloadxen-40efe5366816c6147344fd10902b4c0062980da7.tar.gz
xen-40efe5366816c6147344fd10902b4c0062980da7.tar.bz2
xen-40efe5366816c6147344fd10902b4c0062980da7.zip
libxl: switch device model selection over to libxl_defbool
This allows it to be set via the _init/_setdefault methods. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> [since last v -- ERROR_INVAL on stubdomains + !traditional qemu]
Diffstat (limited to 'tools')
-rw-r--r--tools/libxl/libxl.c2
-rw-r--r--tools/libxl/libxl_create.c14
-rw-r--r--tools/libxl/libxl_dm.c4
-rw-r--r--tools/libxl/libxl_types.idl4
-rw-r--r--tools/libxl/xl_cmdimpl.c4
5 files changed, 18 insertions, 10 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 92b07a9b88..d66191a57d 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2714,7 +2714,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 (b_info->device_model_stubdomain)
+ if (libxl_defbool_val(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 172ff976ef..9f67e9539b 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -80,9 +80,6 @@ void libxl_domain_build_info_init(libxl_domain_build_info *b_info,
b_info->shadow_memkb = LIBXL_MEMKB_DEFAULT;
b_info->video_memkb = LIBXL_MEMKB_DEFAULT;
- b_info->device_model_stubdomain = false;
- b_info->device_model = NULL;
-
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
b_info->u.hvm.timer_mode = LIBXL_TIMER_MODE_DEFAULT;
@@ -122,6 +119,17 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
default:abort();
}
+ libxl_defbool_setdefault(&b_info->device_model_stubdomain, false);
+
+ if (b_info->type == LIBXL_DOMAIN_TYPE_HVM &&
+ b_info->device_model_version !=
+ LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL &&
+ libxl_defbool_val(b_info->device_model_stubdomain)) {
+ LIBXL__LOG(CTX, XTL_ERROR,
+ "device model stubdomains require \"qemu-xen-traditional\"");
+ return ERROR_INVAL;
+ }
+
if (!b_info->max_vcpus)
b_info->max_vcpus = 1;
if (!b_info->cur_vcpus)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index a4f4d440ec..3715b45d11 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -39,7 +39,7 @@ const char *libxl__domain_device_model(libxl__gc *gc,
libxl_ctx *ctx = libxl__gc_owner(gc);
const char *dm;
- if (info->device_model_stubdomain)
+ if (libxl_defbool_val(info->device_model_stubdomain))
return NULL;
if (info->device_model) {
@@ -899,7 +899,7 @@ int libxl__create_device_model(libxl__gc *gc,
char **pass_stuff;
const char *dm;
- if (b_info->device_model_stubdomain) {
+ if (libxl_defbool_val(b_info->device_model_stubdomain)) {
rc = libxl__create_stubdom(gc, domid, guest_config, state, starting_r);
goto out;
}
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 49df300457..d93f40143c 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -240,8 +240,8 @@ libxl_domain_build_info = Struct("domain_build_info",[
("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_stubdomain", libxl_defbool),
+ # if you set device_model you must set device_model_version too
("device_model", string),
("device_model_ssidref", uint32),
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index beb0842901..bd92f54354 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1125,8 +1125,8 @@ skip_vfb:
}
} 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))
- b_info->device_model_stubdomain = l;
+ xlu_cfg_get_defbool (config, "device_model_stubdomain_override",
+ &b_info->device_model_stubdomain, 0);
if (!xlu_cfg_get_string (config, "device_model_stubdomain_seclabel",
&buf, 0)) {