[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] acpi: update RSDP on guest access
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PATCH] acpi: update RSDP on guest access |
Date: |
Wed, 4 Feb 2015 10:32:43 +0100 |
As Igor pointed out, when RSDT offset changes,
RSDP needs to change as well.
We really should have put it in a ROM region, but
we can't change that for old machine types,
let's just set the callback and update it explicitly.
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/i386/acpi-build.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 74586f3..dfbf690 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -1529,6 +1529,7 @@ struct AcpiBuildState {
/* Is table patched? */
uint8_t patched;
PcGuestInfo *guest_info;
+ void *rsdp;
} AcpiBuildState;
static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
@@ -1737,6 +1738,8 @@ static void acpi_build_update(void *build_opaque,
uint32_t offset)
memcpy(qemu_get_ram_ptr(build_state->table_ram), tables.table_data->data,
build_state->table_size);
+ memcpy(build_state->rsdp, tables.rsdp->data, acpi_data_len(tables.rsdp));
+
cpu_physical_memory_set_dirty_range_nocode(build_state->table_ram,
build_state->table_size);
@@ -1811,8 +1814,11 @@ void acpi_setup(PcGuestInfo *guest_info)
* RSDP is small so it's easy to keep it immutable, no need to
* bother with ROM blobs.
*/
- fw_cfg_add_file(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
- tables.rsdp->data, acpi_data_len(tables.rsdp));
+ fw_cfg_add_file_callback(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
+ acpi_build_update, NULL,
+ tables.rsdp->data, acpi_data_len(tables.rsdp));
+
+ build_state->rsdp = tables.rsdp->data;
qemu_register_reset(acpi_build_reset, build_state);
acpi_build_reset(build_state);
--
MST
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] acpi: update RSDP on guest access,
Michael S. Tsirkin <=