tools/libxl: Switch Arm guest type to PVH

Currently, the toolstack is considering Arm guest always PV. However,
they are very similar to PVH because HW virtualization extension are used
and QEMU is not started. So switch Arm guest type to PVH.

To keep compatibility with toolstack creating Arm guest with PV type
(e.g libvirt), libxl will now convert those guests to PVH.

Furthermore, the default type for Arm in xl will now be PVH to allow
smooth transition for user.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Julien Grall authored and Wei Liu committed 2018-10-03 15:58:02 +01:00
1 parent 05c2c04e0d
commit 359970fd8b
6 files changed
+36 -7

No files matched your search

+3 -2
View File
@@ -80,13 +80,14 @@ single host must be unique.
=item B<type="pv">
Specifies that this is to be a PV domain, suitable for hosting Xen-aware
guest operating systems. This is the default.
guest operating systems. This is the default on x86.
=item B<type="pvh">
Specifies that this is to be an PVH domain. That is a lightweight HVM-like
guest without a device model and without many of the emulated devices
available to HVM guests. Note that this mode requires a PVH aware kernel.
available to HVM guests. Note that this mode requires a PVH aware kernel on
x86. This is the default on Arm.
=item B<type="hvm">
+2 -1
View File
@@ -65,7 +65,8 @@ _hidden
int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq);
_hidden
void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info *b_info);
void libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
libxl_domain_build_info *b_info);
_hidden
int libxl__arch_extra_memory(libxl__gc *gc,
+24 -2
View File
@@ -953,7 +953,11 @@ int libxl__arch_domain_init_hw_description(libxl__gc *gc,
int rc;
uint64_t val;
assert(info->type == LIBXL_DOMAIN_TYPE_PV);
if (info->type != LIBXL_DOMAIN_TYPE_PVH) {
LOG(ERROR, "Unsupported Arm guest type %s",
libxl_domain_type_to_string(info->type));
return ERROR_INVAL;
}
/* Set the value of domain param HVM_PARAM_CALLBACK_IRQ. */
val = MASK_INSR(HVM_PARAM_CALLBACK_TYPE_PPI,
@@ -1110,10 +1114,28 @@ 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_domain_build_info *b_info)
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);
/*
* Arm guest are now considered as PVH by the toolstack. To allow
* compatibility with previous toolstack, PV guest are automatically
* converted to PVH.
*/
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.");
/* Re-initialize type to PVH and all associated fields to defaults. */
memset(&b_info->u, '\0', sizeof(b_info->u));
b_info->type = LIBXL_DOMAIN_TYPE_INVALID;
libxl_domain_build_info_init_type(b_info, LIBXL_DOMAIN_TYPE_PVH);
}
/*
+1 -1
View File
@@ -215,7 +215,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
if (!b_info->event_channels)
b_info->event_channels = 1023;
libxl__arch_domain_build_info_setdefault(b_info);
libxl__arch_domain_build_info_setdefault(gc, b_info);
libxl_defbool_setdefault(&b_info->dm_restrict, false);
switch (b_info->type) {
+2 -1
View File
@@ -613,7 +613,8 @@ int libxl__arch_domain_finalise_hw_description(libxl__gc *gc,
return rc;
}
void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info *b_info)
void libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
libxl_domain_build_info *b_info)
{
libxl_defbool_setdefault(&b_info->acpi, true);
}
+4
View File
@@ -1286,7 +1286,11 @@ void parse_config_data(const char *config_source,
}
if (c_info->type == LIBXL_DOMAIN_TYPE_INVALID)
#if defined(__arm__) || defined(__aarch64__)
c_info->type = LIBXL_DOMAIN_TYPE_PVH;
#else
c_info->type = LIBXL_DOMAIN_TYPE_PV;
#endif
xlu_cfg_get_defbool(config, "hap", &c_info->hap, 0);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.