migration: sync all address spaces

Migrating a VM during reboot sometimes results in differences
between the source and destination in the SMRAM area.

This is because migration_bitmap_sync() only fetches from KVM
the dirty log of address_space_memory.  SMRAM memory slots
are ignored and the modifications to SMRAM are not sent to the
destination.

Reported-by: He Rongguang <herongguang.he@huawei.com>
Reviewed-by: He Rongguang <herongguang.he@huawei.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2016-09-22 16:08:31 +02:00
parent cc9d8a3b2c
commit 9c1f8f4493
3 changed files with 37 additions and 18 deletions

View file

@ -1188,12 +1188,11 @@ MemoryRegionSection memory_region_find(MemoryRegion *mr,
hwaddr addr, uint64_t size);
/**
* address_space_sync_dirty_bitmap: synchronize the dirty log for all memory
* memory_global_dirty_log_sync: synchronize the dirty log for all memory
*
* Synchronizes the dirty page log for an entire address space.
* @as: the address space that contains the memory being synchronized
* Synchronizes the dirty page log for all address spaces.
*/
void address_space_sync_dirty_bitmap(AddressSpace *as);
void memory_global_dirty_log_sync(void);
/**
* memory_region_transaction_begin: Start a transaction.