diff options
author | Michael S. Tsirkin | 2014-04-28 07:15:32 +0200 |
---|---|---|
committer | Michael S. Tsirkin | 2014-05-07 11:13:42 +0200 |
commit | 9ac1c4c07e7e6ab16a3e2149e9b32c0d092cb3f5 (patch) | |
tree | 680f66d479b4b36b32a00af883da401df9ae91c2 /hw/i386 | |
parent | acpi-build: properly decrement objects' reference counters (diff) | |
download | qemu-9ac1c4c07e7e6ab16a3e2149e9b32c0d092cb3f5.tar.gz qemu-9ac1c4c07e7e6ab16a3e2149e9b32c0d092cb3f5.tar.xz qemu-9ac1c4c07e7e6ab16a3e2149e9b32c0d092cb3f5.zip |
acpi: fix tables for no-hpet configuration
acpi build tried to add offset of hpet table to rsdt even when hpet was
disabled. If no tables follow hpet, this could lead to a malformed
rsdt.
Fix it up.
To avoid such errors in the future, rearrange code slightly to make it
clear that acpi_add_table stores the offset of the following table - not
of the previous one.
Reported-by: TeLeMan <geleman@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Cc: qemu-stable@nongnu.org
Diffstat (limited to 'hw/i386')
-rw-r--r-- | hw/i386/acpi-build.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1ef8ca9920..9fac589033 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1416,15 +1416,16 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) /* ACPI tables pointed to by RSDT */ acpi_add_table(table_offsets, tables->table_data); build_fadt(tables->table_data, tables->linker, &pm, facs, dsdt); - acpi_add_table(table_offsets, tables->table_data); + acpi_add_table(table_offsets, tables->table_data); build_ssdt(tables->table_data, tables->linker, &cpu, &pm, &misc, &pci, guest_info); - acpi_add_table(table_offsets, tables->table_data); - build_madt(tables->table_data, tables->linker, &cpu, guest_info); acpi_add_table(table_offsets, tables->table_data); + build_madt(tables->table_data, tables->linker, &cpu, guest_info); + if (misc.has_hpet) { + acpi_add_table(table_offsets, tables->table_data); build_hpet(tables->table_data, tables->linker); } if (guest_info->numa_nodes) { |