From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43190) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vtbfh-0008Hl-BY for qemu-devel@nongnu.org; Thu, 19 Dec 2013 06:21:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vtbfb-00019S-Bt for qemu-devel@nongnu.org; Thu, 19 Dec 2013 06:21:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:11236) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vtbfb-00019M-5o for qemu-devel@nongnu.org; Thu, 19 Dec 2013 06:21:35 -0500 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rBJBLXqV014823 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 19 Dec 2013 06:21:34 -0500 Message-ID: <52B2D6DE.60909@redhat.com> Date: Thu, 19 Dec 2013 13:22:06 +0200 From: Orit Wasserman MIME-Version: 1.0 References: <1387293974-24718-1-git-send-email-quintela@redhat.com> <1387293974-24718-38-git-send-email-quintela@redhat.com> In-Reply-To: <1387293974-24718-38-git-send-email-quintela@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 37/38] migration: synchronize memory bitmap 64bits at a time List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Juan Quintela , qemu-devel@nongnu.org On 12/17/2013 05:26 PM, Juan Quintela wrote: > We use the old code if the bitmaps are not aligned > > Signed-off-by: Juan Quintela > --- > arch_init.c | 38 +++++++++++++++++++++++++++++--------- > 1 file changed, 29 insertions(+), 9 deletions(-) > > diff --git a/arch_init.c b/arch_init.c > index 2cd3d00..77912e7 100644 > --- a/arch_init.c > +++ b/arch_init.c > @@ -50,6 +50,7 @@ > #include "exec/cpu-all.h" > #include "exec/ram_addr.h" > #include "hw/acpi/acpi.h" > +#include "qemu/host-utils.h" > > #ifdef DEBUG_ARCH_INIT > #define DPRINTF(fmt, ...) \ > @@ -376,15 +377,34 @@ static inline bool migration_bitmap_set_dirty(ram_addr_t addr) > static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length) > { > ram_addr_t addr; > - > - for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) { > - if (cpu_physical_memory_get_dirty(start + addr, > - TARGET_PAGE_SIZE, > - DIRTY_MEMORY_MIGRATION)) { > - cpu_physical_memory_reset_dirty(start + addr, > - TARGET_PAGE_SIZE, > - DIRTY_MEMORY_MIGRATION); > - migration_bitmap_set_dirty(start + addr); > + unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); > + > + /* start address is aligned at the start of a word? */ > + if (((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) { > + int k; > + int nr = BITS_TO_LONGS(length >> TARGET_PAGE_BITS); > + unsigned long *src = ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]; > + > + for (k = page; k < page + nr; k++) { > + if (src[k]) { > + unsigned long new_dirty; > + new_dirty = ~migration_bitmap[k]; > + migration_bitmap[k] |= src[k]; > + new_dirty &= src[k]; > + migration_dirty_pages += ctpopl(new_dirty); > + src[k] = 0; > + } > + } > + } else { > + for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) { > + if (cpu_physical_memory_get_dirty(start + addr, > + TARGET_PAGE_SIZE, > + DIRTY_MEMORY_MIGRATION)) { > + cpu_physical_memory_reset_dirty(start + addr, > + TARGET_PAGE_SIZE, > + DIRTY_MEMORY_MIGRATION); > + migration_bitmap_set_dirty(start + addr); > + } > } > } > } > Reviewed-by: Orit Wasserman