pc: reserve more memory for ACPI for new machine types
commit 868270f23d
acpi-build: tweak acpi migration limits
broke kernel loading with -kernel/-initrd: it doubled
the size of ACPI tables but did not reserve
enough memory.
As a result, issues on boot and halt are observed.
Fix this up by doubling reserved memory for new machine types.
Cc: qemu-stable@nongnu.org
Reported-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
fa365d7cd1
commit
927766c7d3
12
hw/i386/pc.c
12
hw/i386/pc.c
|
@ -73,7 +73,12 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables. */
|
/* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables. */
|
||||||
#define ACPI_DATA_SIZE 0x10000
|
unsigned acpi_data_size = 0x20000;
|
||||||
|
void pc_set_legacy_acpi_data_size(void)
|
||||||
|
{
|
||||||
|
acpi_data_size = 0x10000;
|
||||||
|
}
|
||||||
|
|
||||||
#define BIOS_CFG_IOPORT 0x510
|
#define BIOS_CFG_IOPORT 0x510
|
||||||
#define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
|
#define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
|
||||||
#define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1)
|
#define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1)
|
||||||
|
@ -811,8 +816,9 @@ static void load_linux(FWCfgState *fw_cfg,
|
||||||
initrd_max = 0x37ffffff;
|
initrd_max = 0x37ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (initrd_max >= max_ram_size-ACPI_DATA_SIZE)
|
if (initrd_max >= max_ram_size - acpi_data_size) {
|
||||||
initrd_max = max_ram_size-ACPI_DATA_SIZE-1;
|
initrd_max = max_ram_size - acpi_data_size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_ADDR, cmdline_addr);
|
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_ADDR, cmdline_addr);
|
||||||
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE, strlen(kernel_cmdline)+1);
|
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE, strlen(kernel_cmdline)+1);
|
||||||
|
|
|
@ -323,6 +323,7 @@ static void pc_compat_2_0(MachineState *machine)
|
||||||
legacy_acpi_table_size = 6652;
|
legacy_acpi_table_size = 6652;
|
||||||
smbios_legacy_mode = true;
|
smbios_legacy_mode = true;
|
||||||
has_reserved_memory = false;
|
has_reserved_memory = false;
|
||||||
|
pc_set_legacy_acpi_data_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_7(MachineState *machine)
|
static void pc_compat_1_7(MachineState *machine)
|
||||||
|
|
|
@ -280,6 +280,7 @@ static void pc_compat_2_0(MachineState *machine)
|
||||||
{
|
{
|
||||||
smbios_legacy_mode = true;
|
smbios_legacy_mode = true;
|
||||||
has_reserved_memory = false;
|
has_reserved_memory = false;
|
||||||
|
pc_set_legacy_acpi_data_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_7(MachineState *machine)
|
static void pc_compat_1_7(MachineState *machine)
|
||||||
|
|
|
@ -176,6 +176,8 @@ void pc_acpi_init(const char *default_dsdt);
|
||||||
PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size,
|
PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size,
|
||||||
ram_addr_t above_4g_mem_size);
|
ram_addr_t above_4g_mem_size);
|
||||||
|
|
||||||
|
void pc_set_legacy_acpi_data_size(void);
|
||||||
|
|
||||||
#define PCI_HOST_PROP_PCI_HOLE_START "pci-hole-start"
|
#define PCI_HOST_PROP_PCI_HOLE_START "pci-hole-start"
|
||||||
#define PCI_HOST_PROP_PCI_HOLE_END "pci-hole-end"
|
#define PCI_HOST_PROP_PCI_HOLE_END "pci-hole-end"
|
||||||
#define PCI_HOST_PROP_PCI_HOLE64_START "pci-hole64-start"
|
#define PCI_HOST_PROP_PCI_HOLE64_START "pci-hole64-start"
|
||||||
|
|
Loading…
Reference in a new issue