fw_cfg_add_file(guest_info->fw_cfg, ACPI_BUILD_TPMLOG_FILE,
tables.tcpalog->data, acpi_data_len(tables.tcpalog));
- /*
- * Though RSDP is small, its contents isn't immutable, so
- * update it along with the rest of tables on guest access.
- */
- fw_cfg_add_file_callback(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
- acpi_build_update, build_state,
- tables.rsdp->data, acpi_data_len(tables.rsdp));
-
- build_state->rsdp = tables.rsdp->data;
+ if (guest_info->has_immutable_rsdp) {
+ /*
+ * Keep for compatibility with old machine types.
+ * Though RSDP is small, its contents isn't immutable, so
+ * update it along with the rest of tables on guest access.
+ */
+ fw_cfg_add_file_callback(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
+ acpi_build_update, build_state,
+ tables.rsdp->data, acpi_data_len(tables.rsdp));
+ build_state->rsdp = tables.rsdp->data;
+ } else {
+ build_state->rsdp = qemu_get_ram_ptr(
+ acpi_add_rom_blob(build_state, tables.rsdp, ACPI_BUILD_RSDP_FILE, 0)
+ );
+ }
qemu_register_reset(acpi_build_reset, build_state);
acpi_build_reset(build_state);
static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
static bool has_acpi_build = true;
+static bool has_immutable_rsdp;
static int legacy_acpi_table_size;
static bool smbios_defaults = true;
static bool smbios_legacy_mode;
guest_info->isapc_ram_fw = !pci_enabled;
guest_info->has_reserved_memory = has_reserved_memory;
+ guest_info->has_immutable_rsdp = has_immutable_rsdp;
if (smbios_defaults) {
MachineClass *mc = MACHINE_GET_CLASS(machine);
static void pc_compat_2_2(MachineState *machine)
{
+ has_immutable_rsdp = true;
x86_cpu_compat_set_features("kvm64", FEAT_1_EDX, 0, CPUID_VME);
x86_cpu_compat_set_features("kvm32", FEAT_1_EDX, 0, CPUID_VME);
x86_cpu_compat_set_features("Conroe", FEAT_1_EDX, 0, CPUID_VME);
#define MAX_SATA_PORTS 6
static bool has_acpi_build = true;
+static bool has_immutable_rsdp;
static bool smbios_defaults = true;
static bool smbios_legacy_mode;
static bool smbios_uuid_encoded = true;
guest_info->isapc_ram_fw = false;
guest_info->has_acpi_build = has_acpi_build;
guest_info->has_reserved_memory = has_reserved_memory;
+ guest_info->has_immutable_rsdp = has_immutable_rsdp;
/* Migration was not supported in 2.0 for Q35, so do not bother
* with this hack (see hw/i386/acpi-build.c).
static void pc_compat_2_2(MachineState *machine)
{
+ has_immutable_rsdp = true;
x86_cpu_compat_set_features("kvm64", FEAT_1_EDX, 0, CPUID_VME);
x86_cpu_compat_set_features("kvm32", FEAT_1_EDX, 0, CPUID_VME);
x86_cpu_compat_set_features("Conroe", FEAT_1_EDX, 0, CPUID_VME);
int legacy_acpi_table_size;
bool has_acpi_build;
bool has_reserved_memory;
+ bool has_immutable_rsdp;
};
/* parallel.c */