mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
05c2c04e0d
commit
359970fd8b
6 files changed
+36
-7
No files matched your search
@@ -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">
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||