From ad5b88b1f198182642b6cbf3dacb4cade0c80fb9 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Mon, 17 Nov 2014 07:49:21 +0200 Subject: acpi-build: mark RAM dirty on table update acpi build modifies internal FW CFG RAM on first access but we forgot to mark it dirty. If this RAM has been migrated already, it won't be migrated again, returning corrupted tables to guest. Signed-off-by: Michael S. Tsirkin --- hw/core/loader.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'hw/core/loader.c') diff --git a/hw/core/loader.c b/hw/core/loader.c index fc15535..7527fd3 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -811,12 +811,12 @@ err: return -1; } -void *rom_add_blob(const char *name, const void *blob, size_t len, +ram_addr_t rom_add_blob(const char *name, const void *blob, size_t len, hwaddr addr, const char *fw_file_name, FWCfgReadCallback fw_callback, void *callback_opaque) { Rom *rom; - void *data = NULL; + ram_addr_t ret = RAM_ADDR_MAX; rom = g_malloc0(sizeof(*rom)); rom->name = g_strdup(name); @@ -828,11 +828,13 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, rom_insert(rom); if (fw_file_name && fw_cfg) { char devpath[100]; + void *data; snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); if (rom_file_has_mr) { data = rom_set_mr(rom, OBJECT(fw_cfg), devpath); + ret = memory_region_get_ram_addr(rom->mr); } else { data = rom->data; } @@ -841,7 +843,7 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, fw_callback, callback_opaque, data, rom->romsize); } - return data; + return ret; } /* This function is specific for elf program because we don't need to allocate -- cgit v1.1