diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index f96777bb99..44dcc98de6 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -409,6 +409,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, @@ -432,8 +433,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; @@ -453,8 +452,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 89eec7ee9d..48969db84b 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1674,6 +1674,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) {