memory: Set DIRTY_MEMORY_MIGRATION when IOMMU is enabled
authorKirti Wankhede <kwankhede@nvidia.com>
Mon, 26 Oct 2020 09:36:20 +0000 (15:06 +0530)
committerAlex Williamson <alex.williamson@redhat.com>
Sun, 1 Nov 2020 19:30:50 +0000 (12:30 -0700)
mr->ram_block is NULL when mr->is_iommu is true, then fr.dirty_log_mask
wasn't set correctly due to which memory listener's log_sync doesn't
get called.
This patch returns log_mask with DIRTY_MEMORY_MIGRATION set when
IOMMU is enabled.

Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com>
Reviewed-by: Yan Zhao <yan.y.zhao@intel.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
softmmu/memory.c

index ee4a6bc16859d445f0425db527a4ad9fab815b30..21d533d8ed841a60ad13c062d90ad33a94dd7bab 100644 (file)
@@ -1806,7 +1806,7 @@ bool memory_region_is_ram_device(MemoryRegion *mr)
 uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr)
 {
     uint8_t mask = mr->dirty_log_mask;
-    if (global_dirty_log && mr->ram_block) {
+    if (global_dirty_log && (mr->ram_block || memory_region_is_iommu(mr))) {
         mask |= (1 << DIRTY_MEMORY_MIGRATION);
     }
     return mask;