From: Don Slutz <don.sl...@gmail.com> This new libxl_domain_create_info field is used to set XEN_DOMCTL_CONFIG_VMWARE_PORT_MASK in the xc_domain_configuration_t for x86.
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. vmware_hwver = 7 is special because that is what controls the enable of CPUID leaves for VMware (vmware_hwver >= 7). Note: vmware_port and nestedhvm cannot be specified at the same time. Signed-off-by: Don Slutz <dsl...@verizon.com> Acked-by: Ian Campbell <ian.campb...@citrix.com> --- v13: Added Acked-by: Ian Campbell v12: s/come/comes/ In v11 this seems to have morphed into only LIBXL_HAVE_LIBXL_VGA_INTERFACE_TYPE_VMWARE being provided, which is clearly not an appropriate umbrella #define. "#define LIBXL_HAVE_CREATEINFO_VMWARE 1" Lets just have a single one of these indicating support for vmware, it should be added at the end of the series after all the baseline vmware functionality is in place. I think that means hwver, vga=vmware and this port stuff. Make (tools: Add vga=vmware) no longer independent. Change the #define to "LIBXL_HAVE_VMWARE" v11: Dropped "If non-zero then default VGA to VMware's VGA" v10: If..." at the start of the sentence ... Also, why is 7 special? docs/man/xl.cfg.pod.5 | 15 +++++++++++++++ tools/libxl/libxl.h | 5 +++++ tools/libxl/libxl_create.c | 9 +++++++++ tools/libxl/libxl_types.idl | 1 + tools/libxl/libxl_x86.c | 2 ++ tools/libxl/xl_cmdimpl.c | 1 + 6 files changed, 33 insertions(+) diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 index 088ea00..d25f7f1 100644 --- a/docs/man/xl.cfg.pod.5 +++ b/docs/man/xl.cfg.pod.5 @@ -1512,6 +1512,8 @@ Turns on or off the exposure of VMware cpuid. The number is VMware's hardware version number, where 0 is off. A number >= 7 is needed to enable exposure of VMware cpuid. +If not zero it changes the default for vmware_port to on. + The hardware version number (vmware_hwver) comes from VMware config files. =over 4 @@ -1523,6 +1525,19 @@ 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. + +Defaults to enabled if vmware_hwver is non-zero (i.e. enabled) +otherwise defaults to disabled. + +Note: 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 6b73848..6025414 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -218,6 +218,11 @@ #define LIBXL_HAVE_SOFT_RESET 1 /* + * libxl has VMware changes. + */ +#define LIBXL_HAVE_VMWARE 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 291c569..239491e 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -41,6 +41,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, c_info->vmware_hwver != 0); libxl_defbool_setdefault(&c_info->run_hotplug_scripts, true); libxl_defbool_setdefault(&c_info->driver_domain, false); @@ -891,6 +892,14 @@ static void initiate_domain_create(libxl__egc *egc, LOG(ERROR, "Unable to set domain build info defaults"); 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, + "vmware_port and nestedhvm cannot be enabled simultaneously\n"); + ret = ERROR_INVAL; + goto error_out; + } if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM && (libxl_defbool_val(d_config->b_info.u.hvm.nested_hvm) && diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 4c4bb8c..89910c0 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -373,6 +373,7 @@ libxl_domain_create_info = Struct("domain_create_info",[ ("pvh", libxl_defbool), ("driver_domain",libxl_defbool), ("vmware_hwver", uint64), + ("vmware_port", libxl_defbool), ], dir=DIR_IN) libxl_domain_restore_params = Struct("domain_restore_params", [ diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 03e717d..3cb2ce3 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -13,6 +13,8 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc, xc_config->emulation_flags = 0; xc_config->vmware_hwver = d_config->c_info.vmware_hwver; + if (libxl_defbool_val(d_config->c_info.vmware_port)) + xc_config->arch_flags |= XEN_DOMCTL_CONFIG_VMWARE_PORT_MASK; return 0; } diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index abd776e..6c77b3d 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1325,6 +1325,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.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel