Make sure ACPI structures are byte-aligned
Apparently, guests are very tolerant of corrupt ACPI tables because our tables have been badly corrupted for some time now. A version of Knoppix using a 2.6.11 kernel refused to boot and it turned out it was due to the interrupt override table introduced by the recent HPET commit. This patch updates the BIOS and introduces a patch to pack the ACPI tables. If you have a guest that used to work and is broken by the this commit, let me know. We have some weird hacks in the tables that I suspect are work arounds for this bug. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6108 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
fe76d97653
commit
ebd7fc5099
36
pc-bios/bios-pq/0006_acpi-packing.patch
Normal file
36
pc-bios/bios-pq/0006_acpi-packing.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Make ACPI tables byte-aligned
|
||||||
|
|
||||||
|
The ACPI spec requires structures to be byte-aligned. I'm a bit surprised we've
|
||||||
|
gotten away with this for so long. This patch allows Knoppix to boot. This bug
|
||||||
|
was reported by Paul Brook.
|
||||||
|
|
||||||
|
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
|
||||||
|
|
||||||
|
diff --git a/bios/rombios32.c b/bios/rombios32.c
|
||||||
|
index 7953485..540912a 100644
|
||||||
|
--- a/bios/rombios32.c
|
||||||
|
+++ b/bios/rombios32.c
|
||||||
|
@@ -1099,6 +1099,12 @@ static void mptable_init(void)
|
||||||
|
/* Table structure from Linux kernel (the ACPI tables are under the
|
||||||
|
BSD license) */
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * All tables must be byte-packed to match the ACPI specification, since
|
||||||
|
+ * the tables are provided by the system BIOS.
|
||||||
|
+ */
|
||||||
|
+#pragma pack(1)
|
||||||
|
+
|
||||||
|
#define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \
|
||||||
|
uint8_t signature [4]; /* ACPI signature (4 ASCII characters) */\
|
||||||
|
uint32_t length; /* Length of table, in bytes, including header */\
|
||||||
|
@@ -1326,6 +1332,10 @@ struct madt_int_override
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Reset to default packing */
|
||||||
|
+
|
||||||
|
+#pragma pack()
|
||||||
|
+
|
||||||
|
#include "acpi-dsdt.hex"
|
||||||
|
|
||||||
|
static inline uint16_t cpu_to_le16(uint16_t x)
|
@ -3,3 +3,4 @@
|
|||||||
0003_smp-startup-poll.patch
|
0003_smp-startup-poll.patch
|
||||||
0004_no-stack-protector.patch
|
0004_no-stack-protector.patch
|
||||||
0005_hpet.patch
|
0005_hpet.patch
|
||||||
|
0006_acpi-packing.patch
|
||||||
|
BIN
pc-bios/bios.bin
BIN
pc-bios/bios.bin
Binary file not shown.
Loading…
Reference in New Issue
Block a user