Message ID | 20190530092919.26059-3-peterx@redhat.com |
---|---|
State | New |
Headers | show |
Series | kvm/migration: support KVM_CLEAR_DIRTY_LOG | expand |
Peter Xu <peterx@redhat.com> wrote: > cpu_physical_memory_sync_dirty_bitmap() has one RAMBlock* as > parameter, which means that it must be with RCU read lock held > already. Taking it again inside seems redundant. Removing it. > Instead comment on the functions about the RCU read lock. > > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> > Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com>
Peter Xu <peterx@redhat.com> wrote: > cpu_physical_memory_sync_dirty_bitmap() has one RAMBlock* as > parameter, which means that it must be with RCU read lock held > already. Taking it again inside seems redundant. Removing it. > Instead comment on the functions about the RCU read lock. Anyways, hotplug/unplug is suppossed to be disable during migration. If we add/remove a ramblock during migration bad things could happen. Later, Juan.
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index 139ad79390..6fc49e5db5 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -408,6 +408,7 @@ static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, } +/* Called with RCU critical section */ static inline uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb, ram_addr_t start, @@ -431,8 +432,6 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb, DIRTY_MEMORY_BLOCK_SIZE); unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); - rcu_read_lock(); - src = atomic_rcu_read( &ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION])->blocks; @@ -452,8 +451,6 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb, idx++; } } - - rcu_read_unlock(); } else { ram_addr_t offset = rb->offset; diff --git a/migration/ram.c b/migration/ram.c index 4c60869226..dc916042fb 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1678,6 +1678,7 @@ static inline bool migration_bitmap_clear_dirty(RAMState *rs, return ret; } +/* Called with RCU critical section */ static void migration_bitmap_sync_range(RAMState *rs, RAMBlock *rb, ram_addr_t length) {