[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 23/25] arm/altp2m: Extend libxl to activate altp2m on ARM.
The current implementation allows to set the parameter HVM_PARAM_ALTP2M. This parameter allows further usage of altp2m on ARM. For this, we define an additional, common altp2m field as part of the libxl_domain_type struct. This field can be set on x86 and on ARM systems through the "altp2m" switch in the domain's configuration file (i.e. set altp2m=1). Note, that the old parameter "altp2mhvm" is still valid for x86. Since this commit defines this old parameter as deprecated, libxl will generate a warning during processing. Signed-off-by: Sergej Proskurin <proskurin@xxxxxxxxxxxxx> --- Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> --- v2: The macro LIBXL_HAVE_ALTP2M is now valid for x86 and ARM. Moved the field altp2m out of info->u.pv.altp2m into the common field info->altp2m, where it can be accessed independent by the underlying architecture (x86 or ARM). Now, altp2m can be activated by the guest control parameter "altp2m". Adopted initialization routines accordingly. --- tools/libxl/libxl.h | 3 ++- tools/libxl/libxl_create.c | 8 +++++--- tools/libxl/libxl_dom.c | 4 ++-- tools/libxl/libxl_types.idl | 4 +++- tools/libxl/xl_cmdimpl.c | 26 +++++++++++++++++++++++++- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 48a43ce..a2cbd34 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -839,7 +839,8 @@ typedef struct libxl__ctx libxl_ctx; /* * LIBXL_HAVE_ALTP2M - * If this is defined, then libxl supports alternate p2m functionality. + * If this is defined, then libxl supports alternate p2m functionality for + * x86 HVM and ARM PV guests. */ #define LIBXL_HAVE_ALTP2M 1 diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index d7db9e9..16d3b52 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -319,7 +319,6 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_defbool_setdefault(&b_info->u.hvm.hpet, true); libxl_defbool_setdefault(&b_info->u.hvm.vpt_align, true); libxl_defbool_setdefault(&b_info->u.hvm.nested_hvm, false); - libxl_defbool_setdefault(&b_info->u.hvm.altp2m, false); libxl_defbool_setdefault(&b_info->u.hvm.usb, false); libxl_defbool_setdefault(&b_info->u.hvm.xen_platform_pci, true); @@ -406,6 +405,9 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_type_to_string(b_info->type)); return ERROR_INVAL; } + + libxl_defbool_setdefault(&b_info->altp2m, false); + return 0; } @@ -901,8 +903,8 @@ static void initiate_domain_create(libxl__egc *egc, 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->b_info.u.hvm.altp2m))) { - LOG(ERROR, "nestedhvm and altp2mhvm cannot be used together"); + libxl_defbool_val(d_config->b_info.altp2m))) { + LOG(ERROR, "nestedhvm and altp2m cannot be used together"); goto error_out; } diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index ec29060..1550ef8 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -291,8 +291,6 @@ static void hvm_set_conf_params(xc_interface *handle, uint32_t domid, libxl_defbool_val(info->u.hvm.vpt_align)); xc_hvm_param_set(handle, domid, HVM_PARAM_NESTEDHVM, libxl_defbool_val(info->u.hvm.nested_hvm)); - xc_hvm_param_set(handle, domid, HVM_PARAM_ALTP2M, - libxl_defbool_val(info->u.hvm.altp2m)); } int libxl__build_pre(libxl__gc *gc, uint32_t domid, @@ -434,6 +432,8 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, #endif } + xc_hvm_param_set(ctx->xch, domid, HVM_PARAM_ALTP2M, libxl_defbool_val(info->altp2m)); + rc = libxl__arch_domain_create(gc, d_config, domid); return rc; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index ef614be..42e7c95 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -512,7 +512,6 @@ libxl_domain_build_info = Struct("domain_build_info",[ ("mmio_hole_memkb", MemKB), ("timer_mode", libxl_timer_mode), ("nested_hvm", libxl_defbool), - ("altp2m", libxl_defbool), ("smbios_firmware", string), ("acpi_firmware", string), ("hdtype", libxl_hdtype), @@ -561,6 +560,9 @@ libxl_domain_build_info = Struct("domain_build_info",[ ("arch_arm", Struct(None, [("gic_version", libxl_gic_version), ])), + # Alternate p2m is not bound to any architecture or guest type, as it is + # supported by x86 HVM and ARM PV guests. + ("altp2m", libxl_defbool), ], dir=DIR_IN ) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 51dc7a0..f4a49ee 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1667,7 +1667,12 @@ static void parse_config_data(const char *config_source, xlu_cfg_get_defbool(config, "nestedhvm", &b_info->u.hvm.nested_hvm, 0); - xlu_cfg_get_defbool(config, "altp2mhvm", &b_info->u.hvm.altp2m, 0); + /* The config parameter "altp2mhvm" is considered deprecated, however + * further considered because of legacy reasons. The config parameter + * "altp2m" shall be used instead. */ + if (!xlu_cfg_get_defbool(config, "altp2mhvm", &b_info->altp2m, 0)) + fprintf(stderr, "WARNING: Specifying \"altp2mhvm\" is deprecated. " + "Please use a \"altp2m\" instead.\n"); xlu_cfg_replace_string(config, "smbios_firmware", &b_info->u.hvm.smbios_firmware, 0); @@ -1727,6 +1732,25 @@ static void parse_config_data(const char *config_source, abort(); } + bool altp2m_support = false; +#if defined(__i386__) || defined(__x86_64__) + /* Alternate p2m support on x86 is available only for HVM guests. */ + if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) + altp2m_support = true; +#elif defined(__arm__) || defined(__aarch64__) + /* Alternate p2m support on ARM is available for all guests. */ + altp2m_support = true; +#endif + + if (altp2m_support) { + /* The config parameter "altp2m" replaces the parameter "altp2mhvm". + * For legacy reasons, both parameters are accepted on x86 HVM guests + * (only "altp2m" is accepted on ARM guests). If both parameters are + * given, it must be considered that the config parameter "altp2m" will + * always have priority over "altp2mhvm". */ + xlu_cfg_get_defbool(config, "altp2m", &b_info->altp2m, 0); + } + if (!xlu_cfg_get_list(config, "ioports", &ioports, &num_ioports, 0)) { b_info->num_ioports = num_ioports; b_info->ioports = calloc(num_ioports, sizeof(*b_info->ioports)); -- 2.9.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |