From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43683) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPru8-0002KN-Mo for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:46:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZPru4-0005z9-Ca for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:46:44 -0400 Received: from mail-wi0-x233.google.com ([2a00:1450:400c:c05::233]:35529) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPru4-0005z3-18 for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:46:40 -0400 Received: by wicne3 with SMTP id ne3so138111726wic.0 for ; Thu, 13 Aug 2015 05:46:39 -0700 (PDT) Sender: Paolo Bonzini References: <1439463094-5394-1-git-send-email-dgilbert@redhat.com> <1439463094-5394-2-git-send-email-dgilbert@redhat.com> From: Paolo Bonzini Message-ID: <55CC91AB.4010904@redhat.com> Date: Thu, 13 Aug 2015 14:46:35 +0200 MIME-Version: 1.0 In-Reply-To: <1439463094-5394-2-git-send-email-dgilbert@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/5] migration/ram.c: Use RAMBlock rather than MemoryRegion List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert (git)" , qemu-devel@nongnu.org Cc: amit.shah@redhat.com, quintela@redhat.com On 13/08/2015 12:51, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" > > 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 > --- > 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 It would be nice in a follow-up patch to move RAMBlock-related definitions into include/exec/ram_addr.h. Paolo