48 lines
1.8 KiB
Diff
48 lines
1.8 KiB
Diff
From beb8650b34906da8f87e07238ab33aa8ffc54a67 Mon Sep 17 00:00:00 2001
|
|
From: "Michael S. Tsirkin" <mst@redhat.com>
|
|
Date: Thu, 18 Sep 2014 16:32:07 +0300
|
|
Subject: [PATCH] pc: leave more space for BIOS allocations
|
|
|
|
Since QEMU 2.1, we are allocating more space for ACPI tables, so no
|
|
space is left after initrd for the BIOS to allocate memory.
|
|
|
|
Besides ACPI tables, there are a few other uses of high memory in
|
|
SeaBIOS: SMBIOS tables and USB drivers use it in particular. These uses
|
|
allocate a very small amount of memory. Malloc metadata also lives
|
|
there. So we need _some_ extra padding there to avoid initrd breakage,
|
|
but not much.
|
|
|
|
John Snow found a case where RHEL5 was broken by the recent change to
|
|
ACPI_TABLE_SIZE; in his case 4KB of extra padding are fine, but just to
|
|
be safe I am adding 32KB, which is roughly the same amount of padding
|
|
that was left by QEMU 2.0 and earlier.
|
|
|
|
Move initrd to leave some space for the BIOS.
|
|
|
|
Cc: qemu-stable@nongnu.org
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Reported-by: John Snow <jsnow@redhat.com>
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
(cherry picked from commit 438f92ee9f6a4f78f8adcc399809e252b6da72a2)
|
|
---
|
|
hw/i386/pc.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
|
|
index 97932a6..ef9fad8 100644
|
|
--- a/hw/i386/pc.c
|
|
+++ b/hw/i386/pc.c
|
|
@@ -72,8 +72,10 @@
|
|
#define DPRINTF(fmt, ...)
|
|
#endif
|
|
|
|
-/* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables. */
|
|
-unsigned acpi_data_size = 0x20000;
|
|
+/* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables
|
|
+ * (128K) and other BIOS datastructures (less than 4K reported to be used at
|
|
+ * the moment, 32K should be enough for a while). */
|
|
+unsigned acpi_data_size = 0x20000 + 0x8000;
|
|
void pc_set_legacy_acpi_data_size(void)
|
|
{
|
|
acpi_data_size = 0x10000;
|