[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v9 07/13] tools: Add vmware_port support
This new libxl_domain_create_info field is used to set XEN_DOMCTL_CDF_vmware_port for the xc_domain_create() routine. In xen it is is_vmware_port_enabled. If is_vmware_port_enabled then enable a limited support of VMware's hyper-call. VMware's hyper-call is also known as VMware Backdoor I/O Port. if vmware_port is not specified in the config file, let "vmware_hwver != 0" be the default value. This means that only vmware_hwver = 7 needs to be specified to enable both features. Note: both vmware_port and nestedhvm cannot be specified at the same time. Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx> --- v9: s/vmware_hw/vmware_hwver/i Added vmware_port and nestedhvm checking. docs/man/xl.cfg.pod.5 | 14 ++++++++++++++ tools/libxl/libxl.h | 5 +++++ tools/libxl/libxl_create.c | 16 ++++++++++++++-- tools/libxl/libxl_dm.c | 4 +++- tools/libxl/libxl_internal.h | 3 ++- tools/libxl/libxl_types.idl | 1 + tools/libxl/xl_cmdimpl.c | 1 + 7 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 index 905ca8f..fb44e64 100644 --- a/docs/man/xl.cfg.pod.5 +++ b/docs/man/xl.cfg.pod.5 @@ -1288,6 +1288,20 @@ For vssd:VirtualSystemType == vmx-07, vmware_hwver = 7. =back +=item B<vmware_port=BOOLEAN> + +Turns on or off the exposure of VMware port. This is known as +vmport in QEMU. Also called VMware Backdoor I/O Port. Not all +defined VMware backdoor commands are implemented. All of the +ones that Linux kernel uses are defined. + +if vmware_port is not specified in the config file, let vmware_hwver != 0 +be the default value. This means that only vmware_hwver = 7 needs to +be specified to enable both features. + +Note: both vmware_port and nestedhvm cannot be specified at the +same time. + =back =head3 Emulated VGA Graphics Device diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 0c27e5c..792b569 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -173,6 +173,11 @@ #define LIBXL_HAVE_BUILDINFO_HVM_VMWARE_HWVER 1 /* + * libxl_domain_create_info has the vmware_port field. + */ +#define LIBXL_HAVE_CREATEINFO_VMWARE_PORT 1 + +/* * libxl ABI compatibility * * The only guarantee which libxl makes regarding ABI compatibility diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 8c910c4..439164a 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -26,7 +26,8 @@ #include <xen/hvm/e820.h> int libxl__domain_create_info_setdefault(libxl__gc *gc, - libxl_domain_create_info *c_info) + libxl_domain_create_info *c_info, + bool vmware_port_default) { if (!c_info->type) return ERROR_INVAL; @@ -39,6 +40,7 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc, libxl_defbool_setdefault(&c_info->hap, libxl_defbool_val(c_info->pvh)); } + libxl_defbool_setdefault(&c_info->vmware_port, vmware_port_default); libxl_defbool_setdefault(&c_info->run_hotplug_scripts, true); libxl_defbool_setdefault(&c_info->driver_domain, false); @@ -531,6 +533,7 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_create_info *info, flags |= XEN_DOMCTL_CDF_hvm_guest; flags |= libxl_defbool_val(info->hap) ? XEN_DOMCTL_CDF_hap : 0; flags |= libxl_defbool_val(info->oos) ? 0 : XEN_DOMCTL_CDF_oos_off; + flags |= libxl_defbool_val(info->vmware_port)? XEN_DOMCTL_CDF_vmware_port : 0; } else if (libxl_defbool_val(info->pvh)) { flags |= XEN_DOMCTL_CDF_pvh_guest; if (!libxl_defbool_val(info->hap)) { @@ -859,7 +862,9 @@ static void initiate_domain_create(libxl__egc *egc, goto error_out; } - ret = libxl__domain_create_info_setdefault(gc, &d_config->c_info); + ret = libxl__domain_create_info_setdefault(gc, &d_config->c_info, + d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM && + d_config->b_info.u.hvm.vmware_hwver); if (ret) goto error_out; ret = libxl__domain_make(gc, &d_config->c_info, &domid); @@ -876,6 +881,13 @@ static void initiate_domain_create(libxl__egc *egc, ret = libxl__domain_build_info_setdefault(gc, &d_config->b_info); if (ret) goto error_out; + if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM && + libxl_defbool_val(d_config->b_info.u.hvm.nested_hvm) && + libxl_defbool_val(d_config->c_info.vmware_port)) { + LOG(ERROR, "Both vmware_port and nestedhvm can not be enabled\n"); + ret = ERROR_INVAL; + goto error_out; + } if (!sched_params_valid(gc, domid, &d_config->b_info.sched_params)) { LOG(ERROR, "Invalid scheduling parameters\n"); ret = ERROR_INVAL; diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index b05fa73..c27f9a4 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -1061,7 +1061,9 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss) dm_config->c_info.run_hotplug_scripts = guest_config->c_info.run_hotplug_scripts; - ret = libxl__domain_create_info_setdefault(gc, &dm_config->c_info); + ret = libxl__domain_create_info_setdefault(gc, &dm_config->c_info, + dm_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM && + dm_config->b_info.u.hvm.vmware_hwver); if (ret) goto out; ret = libxl__domain_build_info_setdefault(gc, &dm_config->b_info); if (ret) goto out; diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 934465a..680398c 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1071,7 +1071,8 @@ _hidden int libxl__init_console_from_channel(libxl__gc *gc, * to be called before using any values within these structures. */ _hidden int libxl__domain_create_info_setdefault(libxl__gc *gc, - libxl_domain_create_info *c_info); + libxl_domain_create_info *c_info, + bool vmware_port_default); _hidden int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info); _hidden int libxl__device_disk_setdefault(libxl__gc *gc, diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index ad596de..0d75673 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -329,6 +329,7 @@ libxl_domain_create_info = Struct("domain_create_info",[ ("type", libxl_domain_type), ("hap", libxl_defbool), ("oos", libxl_defbool), + ("vmware_port", libxl_defbool), ("ssidref", uint32), ("ssid_label", string), ("name", string), diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index ca6d0ec..59b1811 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1047,6 +1047,7 @@ static void parse_config_data(const char *config_source, } xlu_cfg_get_defbool(config, "oos", &c_info->oos, 0); + xlu_cfg_get_defbool(config, "vmware_port", &c_info->vmware_port, 0); if (!xlu_cfg_get_string (config, "pool", &buf, 0)) xlu_cfg_replace_string(config, "pool", &c_info->pool_name, 0); -- 1.8.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |