From: Wei Liu Date: Fri, 2 Nov 2018 12:34:12 +0000 (+0000) Subject: libxl/arm: fix guest type conversion X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~3069 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2cf113891a38cc05434bc9876ffc107a990887be;p=xen.git libxl/arm: fix guest type conversion Commit 359970fd8b ("tools/libxl: Switch Arm guest type to PVH") missed changing the type field in c_info. This issue didn't surface until ef72c93df9 which made creating PV guest on Arm unusable. Create libxl__arch_domain_create_info_setdefault and switch the type there. Signed-off-by: Wei Liu Acked-by: Ian Jackson --- diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h index 930570ef1e..d624159e53 100644 --- a/tools/libxl/libxl_arch.h +++ b/tools/libxl/libxl_arch.h @@ -64,6 +64,10 @@ int libxl__arch_vnuma_build_vmemrange(libxl__gc *gc, _hidden int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq); +_hidden +void libxl__arch_domain_create_info_setdefault(libxl__gc *gc, + libxl_domain_create_info *c_info); + _hidden void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info); diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c index 25dc3defc6..141e159043 100644 --- a/tools/libxl/libxl_arm.c +++ b/tools/libxl/libxl_arm.c @@ -1114,23 +1114,34 @@ int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq) return xc_domain_bind_pt_spi_irq(CTX->xch, domid, irq, irq); } -void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, - libxl_domain_build_info *b_info) +void libxl__arch_domain_create_info_setdefault(libxl__gc *gc, + libxl_domain_create_info *c_info) { - /* ACPI is disabled by default */ - libxl_defbool_setdefault(&b_info->acpi, false); - /* * Arm guest are now considered as PVH by the toolstack. To allow * compatibility with previous toolstack, PV guest are automatically * converted to PVH. */ + if (c_info->type == LIBXL_DOMAIN_TYPE_PV) { + LOG(WARN, "Converting PV guest to PVH."); + LOG(WARN, "Arm guest are now PVH."); + LOG(WARN, "Please fix your configuration file/toolstack."); + + c_info->type = LIBXL_DOMAIN_TYPE_PVH; + /* All other fields can remain untouched */ + } +} + +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, + libxl_domain_build_info *b_info) +{ + /* ACPI is disabled by default */ + libxl_defbool_setdefault(&b_info->acpi, false); + if (b_info->type != LIBXL_DOMAIN_TYPE_PV) return; - LOG(WARN, "Converting PV guest to PVH."); - LOG(WARN, "Arm guest are now PVH."); - LOG(WARN, "Please fix your configuration file/toolstack."); + LOG(DEBUG, "Converting build_info to PVH"); /* Re-initialize type to PVH and all associated fields to defaults. */ memset(&b_info->u, '\0', sizeof(b_info->u)); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 4bb750e951..fa573344bc 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -35,6 +35,8 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc, return ERROR_INVAL; } + libxl__arch_domain_create_info_setdefault(gc, c_info); + if (c_info->type != LIBXL_DOMAIN_TYPE_PV) { libxl_defbool_setdefault(&c_info->hap, true); libxl_defbool_setdefault(&c_info->oos, true); diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 8b6759c089..c04fd75a64 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -613,6 +613,11 @@ int libxl__arch_domain_finalise_hw_description(libxl__gc *gc, return rc; } +void libxl__arch_domain_create_info_setdefault(libxl__gc *gc, + libxl_domain_create_info *c_info) +{ +} + void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info) {