diff options
author | Steve Sistare <steven.sistare@oracle.com> | 2023-06-07 08:18:36 -0700 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2023-06-13 11:28:58 +0200 |
commit | b0182e537e5aba38031a5009cb16d5e924342458 (patch) | |
tree | 67840f4419f12bc9de0005d2cbd0af316f2c4a3d /migration | |
parent | 6fe4f6c941923608027e10af5dd30f18d481f9b9 (diff) | |
download | qemu-b0182e537e5aba38031a5009cb16d5e924342458.zip qemu-b0182e537e5aba38031a5009cb16d5e924342458.tar.gz qemu-b0182e537e5aba38031a5009cb16d5e924342458.tar.bz2 |
exec/memory: Introduce RAM_NAMED_FILE flag
migrate_ignore_shared() is an optimization that avoids copying memory
that is visible and can be mapped on the target. However, a
memory-backend-ram or a memory-backend-memfd block with the RAM_SHARED
flag set is not migrated when migrate_ignore_shared() is true. This is
wrong, because the block has no named backing store, and its contents will
be lost. To fix, ignore shared memory iff it is a named file. Define a
new flag RAM_NAMED_FILE to distinguish this case.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Message-Id: <1686151116-253260-1-git-send-email-steven.sistare@oracle.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Diffstat (limited to 'migration')
-rw-r--r-- | migration/ram.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/migration/ram.c b/migration/ram.c index 88a6c82..5283a75 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -197,7 +197,8 @@ static bool postcopy_preempt_active(void) bool ramblock_is_ignored(RAMBlock *block) { return !qemu_ram_is_migratable(block) || - (migrate_ignore_shared() && qemu_ram_is_shared(block)); + (migrate_ignore_shared() && qemu_ram_is_shared(block) + && qemu_ram_is_named_file(block)); } #undef RAMBLOCK_FOREACH |