@@ -1237,6 +1237,7 @@ the virtual firmware to the guest Operating System. ACPI is required
by most modern guest Operating Systems. This option is enabled by
default and usually you should omit it. However it may be necessary to
disable ACPI for compatibility with some guest Operating Systems.
+This option is true for x86 while it's false for ARM by default.
=item B<acpi_s3=BOOLEAN>
@@ -65,4 +65,8 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc,
int libxl__dom_load_acpi(libxl__gc *gc,
libxl_domain_build_info *info,
struct xc_dom_image *dom);
+
+_hidden
+void libxl__arch_domain_build_info_acpi_setdefault(
+ libxl_domain_build_info *b_info);
#endif
@@ -985,6 +985,12 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc,
return 0;
}
+void libxl__arch_domain_build_info_acpi_setdefault(
+ libxl_domain_build_info *b_info)
+{
+ libxl_defbool_setdefault(&b_info->acpi, false);
+}
+
/*
* Local variables:
* mode: C
@@ -215,6 +215,8 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
if (!b_info->event_channels)
b_info->event_channels = 1023;
+ libxl__arch_domain_build_info_acpi_setdefault(b_info);
+
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT)
@@ -454,7 +456,7 @@ int libxl__domain_build(libxl__gc *gc,
localents = libxl__calloc(gc, 9, sizeof(char *));
i = 0;
localents[i++] = "platform/acpi";
- localents[i++] = libxl_defbool_val(info->u.hvm.acpi) ? "1" : "0";
+ localents[i++] = libxl__acpi_defbool_val(info) ? "1" : "0";
localents[i++] = "platform/acpi_s3";
localents[i++] = libxl_defbool_val(info->u.hvm.acpi_s3) ? "1" : "0";
localents[i++] = "platform/acpi_s4";
@@ -583,7 +583,7 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
if (b_info->u.hvm.soundhw) {
flexarray_vappend(dm_args, "-soundhw", b_info->u.hvm.soundhw, NULL);
}
- if (libxl_defbool_val(b_info->u.hvm.acpi)) {
+ if (libxl__acpi_defbool_val(b_info)) {
flexarray_append(dm_args, "-acpi");
}
if (b_info->max_vcpus > 1) {
@@ -1204,7 +1204,7 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
if (b_info->u.hvm.soundhw) {
flexarray_vappend(dm_args, "-soundhw", b_info->u.hvm.soundhw, NULL);
}
- if (!libxl_defbool_val(b_info->u.hvm.acpi)) {
+ if (!libxl__acpi_defbool_val(b_info)) {
flexarray_append(dm_args, "-no-acpi");
}
if (b_info->max_vcpus > 1) {
@@ -4267,6 +4267,12 @@ _hidden int libxl__read_sysfs_file_contents(libxl__gc *gc,
#define LIBXL_QEMU_USER_PREFIX "xen-qemuuser"
#define LIBXL_QEMU_USER_BASE LIBXL_QEMU_USER_PREFIX"-domid"
#define LIBXL_QEMU_USER_SHARED LIBXL_QEMU_USER_PREFIX"-shared"
+
+static inline bool libxl__acpi_defbool_val(const libxl_domain_build_info *b_info)
+{
+ return libxl_defbool_val(b_info->acpi) &&
+ libxl_defbool_val(b_info->u.hvm.acpi);
+}
#endif
/*
@@ -494,11 +494,15 @@ libxl_domain_build_info = Struct("domain_build_info",[
# Note that the partial device tree should avoid to use the phandle
# 65000 which is reserved by the toolstack.
("device_tree", string),
+ ("acpi", libxl_defbool),
("u", KeyedUnion(None, libxl_domain_type, "type",
[("hvm", Struct(None, [("firmware", string),
("bios", libxl_bios_type),
("pae", libxl_defbool),
("apic", libxl_defbool),
+ # The following acpi field is deprecated.
+ # Please use the unified acpi field above
+ # which works for both x86 and ARM.
("acpi", libxl_defbool),
("acpi_s3", libxl_defbool),
("acpi_s4", libxl_defbool),
@@ -570,6 +570,12 @@ out:
return rc;
}
+void libxl__arch_domain_build_info_acpi_setdefault(
+ libxl_domain_build_info *b_info)
+{
+ libxl_defbool_setdefault(&b_info->acpi, true);
+}
+
/*
* Local variables:
* mode: C
@@ -1547,6 +1547,7 @@ static void parse_config_data(const char *config_source,
b_info->cmdline = parse_cmdline(config);
xlu_cfg_get_defbool(config, "driver_domain", &c_info->driver_domain, 0);
+ xlu_cfg_get_defbool(config, "acpi", &b_info->acpi, 0);
switch(b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
@@ -1576,7 +1577,6 @@ static void parse_config_data(const char *config_source,
xlu_cfg_get_defbool(config, "pae", &b_info->u.hvm.pae, 0);
xlu_cfg_get_defbool(config, "apic", &b_info->u.hvm.apic, 0);
- xlu_cfg_get_defbool(config, "acpi", &b_info->u.hvm.acpi, 0);
xlu_cfg_get_defbool(config, "acpi_s3", &b_info->u.hvm.acpi_s3, 0);
xlu_cfg_get_defbool(config, "acpi_s4", &b_info->u.hvm.acpi_s4, 0);
xlu_cfg_get_defbool(config, "nx", &b_info->u.hvm.nx, 0);