diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2012-01-31 16:34:32 +0000 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2012-01-31 16:34:32 +0000 |
commit | 72efe9e92468bcc2779064c6d32ee1c70a943f0f (patch) | |
tree | 1164adfb646e09a4c2dd4448f6b09c920a0e4c65 /tools/libxl | |
parent | e08baad6ae73b552bfbfc880cba58fed91da2568 (diff) | |
download | xen-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/libxl')
-rw-r--r-- | tools/libxl/libxl.c | 2 | ||||
-rw-r--r-- | tools/libxl/libxl_create.c | 23 | ||||
-rw-r--r-- | tools/libxl/libxl_dm.c | 57 | ||||
-rw-r--r-- | tools/libxl/libxl_dom.c | 4 | ||||
-rw-r--r-- | tools/libxl/libxl_internal.h | 2 | ||||
-rw-r--r-- | tools/libxl/libxl_types.idl | 23 | ||||
-rw-r--r-- | tools/libxl/xl_cmdimpl.c | 14 |
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); \ |