On 13/08/2015 12:51, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > RAM migration mainly works on RAMBlocks but in a few places > uses data from MemoryRegions to access the same information that's > already held in RAMBlocks; clean it up just to avoid the > MemoryRegion use. > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/ram.c | 26 +++++++++++--------------- > 1 file changed, 11 insertions(+), 15 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index 7f007e6..7df9157 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -497,13 +497,13 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t > **current_data, > > /* Called with rcu_read_lock() to protect migration_bitmap */ > static inline > -ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr, > +ram_addr_t migration_bitmap_find_and_reset_dirty(RAMBlock *rb, > ram_addr_t start) > { > - unsigned long base = mr->ram_addr >> TARGET_PAGE_BITS; > + unsigned long base = rb->offset >> TARGET_PAGE_BITS; > unsigned long nr = base + (start >> TARGET_PAGE_BITS); > - uint64_t mr_size = TARGET_PAGE_ALIGN(memory_region_size(mr)); > - unsigned long size = base + (mr_size >> TARGET_PAGE_BITS); > + uint64_t rb_size = rb->used_length; > + unsigned long size = base + (rb_size >> TARGET_PAGE_BITS); > unsigned long *bitmap; > > unsigned long next; > @@ -573,7 +573,7 @@ static void migration_bitmap_sync(void) > qemu_mutex_lock(&migration_bitmap_mutex); > rcu_read_lock(); > QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { > - migration_bitmap_sync_range(block->mr->ram_addr, block->used_length); > + migration_bitmap_sync_range(block->offset, block->used_length); > } > rcu_read_unlock(); > qemu_mutex_unlock(&migration_bitmap_mutex); > @@ -668,12 +668,11 @@ static int ram_save_page(QEMUFile *f, RAMBlock* block, > ram_addr_t offset, > int pages = -1; > uint64_t bytes_xmit; > ram_addr_t current_addr; > - MemoryRegion *mr = block->mr; > uint8_t *p; > int ret; > bool send_async = true; > > - p = memory_region_get_ram_ptr(mr) + offset; > + p = block->host + offset; > > /* In doubt sent page as normal */ > bytes_xmit = 0; > @@ -744,7 +743,7 @@ static int do_compress_ram_page(CompressParam *param) > RAMBlock *block = param->block; > ram_addr_t offset = param->offset; > > - p = memory_region_get_ram_ptr(block->mr) + (offset & TARGET_PAGE_MASK); > + p = block->host + (offset & TARGET_PAGE_MASK); > > bytes_sent = save_page_header(param->file, block, offset | > RAM_SAVE_FLAG_COMPRESS_PAGE); > @@ -852,11 +851,10 @@ static int ram_save_compressed_page(QEMUFile *f, > RAMBlock *block, > { > int pages = -1; > uint64_t bytes_xmit; > - MemoryRegion *mr = block->mr; > uint8_t *p; > int ret; > > - p = memory_region_get_ram_ptr(mr) + offset; > + p = block->host + offset; > > bytes_xmit = 0; > ret = ram_control_save_page(f, block->offset, > @@ -929,14 +927,12 @@ static int ram_find_and_save_block(QEMUFile *f, bool > last_stage, > ram_addr_t offset = last_offset; > bool complete_round = false; > int pages = 0; > - MemoryRegion *mr; > > if (!block) > block = QLIST_FIRST_RCU(&ram_list.blocks); > > while (true) { > - mr = block->mr; > - offset = migration_bitmap_find_and_reset_dirty(mr, offset); > + offset = migration_bitmap_find_and_reset_dirty(block, offset); > if (complete_round && block == last_seen_block && > offset >= last_offset) { > break; > @@ -1344,7 +1340,7 @@ static inline void *host_from_stream_offset(QEMUFile *f, > return NULL; > } > > - return memory_region_get_ram_ptr(block->mr) + offset; > + return block->host + offset; > } > > len = qemu_get_byte(f); > @@ -1354,7 +1350,7 @@ static inline void *host_from_stream_offset(QEMUFile *f, > QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { > if (!strncmp(id, block->idstr, sizeof(id)) && > block->max_length > offset) { > - return memory_region_get_ram_ptr(block->mr) + offset; > + return block->host + offset; > } > } > >
Acked-by: Paolo Bonzini <pbonz...@redhat.com> It would be nice in a follow-up patch to move RAMBlock-related definitions into include/exec/ram_addr.h. Paolo