On 01/29/2014 09:03 PM, Paolo Bonzini wrote: > Il 29/01/2014 09:12, Alexey Kardashevskiy ha scritto: >> On 01/29/2014 06:30 PM, Paolo Bonzini wrote: >>> Il 29/01/2014 06:50, Alexey Kardashevskiy ha scritto: >>>> Since 64K system page size is quite popular configuration on PPC64, >>>> the original patch breaks migration. >>>> >>>> Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> >>>> --- >>>> include/exec/ram_addr.h | 54 >>>> +++++++++++++++++-------------------------------- >>>> 1 file changed, 18 insertions(+), 36 deletions(-) >>>> >>>> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h >>>> index 33c8acc..c6736ed 100644 >>>> --- a/include/exec/ram_addr.h >>>> +++ b/include/exec/ram_addr.h >>>> @@ -83,47 +83,29 @@ static inline void >>>> cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap, >>>> ram_addr_t >>>> start, >>>> ram_addr_t >>>> pages) >>>> { >>>> - unsigned long i, j; >>>> + unsigned int i, j; >>>> unsigned long page_number, c; >>>> hwaddr addr; >>>> ram_addr_t ram_addr; >>>> - unsigned long len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; >>>> + unsigned int len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; >>>> unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; >>>> - 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) { >>> >>> Why not just add " && hpratio == 1" here? >> >> Or fix dirty map to make it 1 bit per system page size (may be the fix is >> coming, who knows, but I am just not ready to do this now). Or do tricks >> with bits and support hpratio!=1. I could not choose and decided to revert >> it for now :) > > Can you post the patch that adds " && hpratio == 1"?
Ok, done. But I still wonder why there are still TARGET_PAGE_SIZE vs. getpagesize() and why bitmap formats are different between KVM and QEMU - is it just an old stuff which has to be fixes some day or something more? >> Do we really earn a lot here? > > Yes, because this is the only part of migration that runs with the iothread > lock taken. Without Juan's patches you can see large guests hiccups that > last a few seconds. -- Alexey