From: Steve Sistare Date: Fri, 7 Mar 2025 20:55:53 +0000 (-0800) Subject: hw/loader: fix roms during cpr X-Git-Tag: v10.0.0-rc0~3^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b42f28111e081ab1fd370e92ee78a461027590f0;p=thirdparty%2Fqemu.git hw/loader: fix roms during cpr During normal migration, new QEMU creates and initializes memory regions, then loads the preserved contents of the region from vmstate. During CPR, memory regions are preserved in place, then the realize method initializes the regions contents, losing the old contents. To fix, skip the re-init during CPR. Signed-off-by: Steve Sistare Reviewed-by: Fabiano Rosas Message-ID: <1741380954-341079-4-git-send-email-steven.sistare@oracle.com> Signed-off-by: Fabiano Rosas --- diff --git a/hw/core/loader.c b/hw/core/loader.c index 332b879a0b..ce6ff1b52e 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -51,6 +51,7 @@ #include "trace.h" #include "hw/hw.h" #include "disas/disas.h" +#include "migration/cpr.h" #include "migration/vmstate.h" #include "monitor/monitor.h" #include "system/reset.h" @@ -1029,7 +1030,9 @@ static void *rom_set_mr(Rom *rom, Object *owner, const char *name, bool ro) vmstate_register_ram_global(rom->mr); data = memory_region_get_ram_ptr(rom->mr); - memcpy(data, rom->data, rom->datasize); + if (!cpr_is_incoming()) { + memcpy(data, rom->data, rom->datasize); + } return data; }