diff options
| author | Fabiano Rosas <farosas@suse.de> | 2024-03-11 18:00:10 +0000 |
|---|---|---|
| committer | Peter Xu <peterx@redhat.com> | 2024-03-11 16:56:52 -0400 |
| commit | c3cdf3fb18e5ecf8a3b4dc7223ddbfc53c418eb8 (patch) | |
| tree | 5339705640fded940322e74150bac9010a10c3a7 | |
| parent | 44fe138edc0f08b8568fe4ee90be6a2a56c67daf (diff) | |
| download | focaccia-qemu-c3cdf3fb18e5ecf8a3b4dc7223ddbfc53c418eb8.tar.gz focaccia-qemu-c3cdf3fb18e5ecf8a3b4dc7223ddbfc53c418eb8.zip | |
migration/multifd: Allow clearing of the file_bmap from multifd
We currently only need to clear the mapped-ram file bitmap from the migration thread during save_zero_page. We're about to add support for zero page detection on the multifd thread, so allow ramblock_set_file_bmap_atomic() to also clear the bits. Signed-off-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240311180015.3359271-3-hao.xiang@linux.dev Signed-off-by: Peter Xu <peterx@redhat.com>
| -rw-r--r-- | migration/multifd.c | 2 | ||||
| -rw-r--r-- | migration/ram.c | 8 | ||||
| -rw-r--r-- | migration/ram.h | 3 |
3 files changed, 9 insertions, 4 deletions
diff --git a/migration/multifd.c b/migration/multifd.c index bf9d483f7a..3ba922694e 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -115,7 +115,7 @@ static void multifd_set_file_bitmap(MultiFDSendParams *p) assert(pages->block); for (int i = 0; i < p->pages->num; i++) { - ramblock_set_file_bmap_atomic(pages->block, pages->offset[i]); + ramblock_set_file_bmap_atomic(pages->block, pages->offset[i], true); } } diff --git a/migration/ram.c b/migration/ram.c index 3ee8cb47d3..dec2e73f8e 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3149,9 +3149,13 @@ static void ram_save_file_bmap(QEMUFile *f) } } -void ramblock_set_file_bmap_atomic(RAMBlock *block, ram_addr_t offset) +void ramblock_set_file_bmap_atomic(RAMBlock *block, ram_addr_t offset, bool set) { - set_bit_atomic(offset >> TARGET_PAGE_BITS, block->file_bmap); + if (set) { + set_bit_atomic(offset >> TARGET_PAGE_BITS, block->file_bmap); + } else { + clear_bit_atomic(offset >> TARGET_PAGE_BITS, block->file_bmap); + } } /** diff --git a/migration/ram.h b/migration/ram.h index b9ac0da587..08feecaf51 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -75,7 +75,8 @@ bool ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *rb, Error **errp); bool ramblock_page_is_discarded(RAMBlock *rb, ram_addr_t start); void postcopy_preempt_shutdown_file(MigrationState *s); void *postcopy_preempt_thread(void *opaque); -void ramblock_set_file_bmap_atomic(RAMBlock *block, ram_addr_t offset); +void ramblock_set_file_bmap_atomic(RAMBlock *block, ram_addr_t offset, + bool set); /* ram cache */ int colo_init_ram_cache(void); |