On Wed, Aug 10, 2016 at 10:22 AM, Li, Liang Z <liang.z...@intel.com> wrote: > Hi Jiangshan, > > Glad to see your patch. It's a simple implementation which could provide very > useful functions. > >> +static void migration_bitmap_init(unsigned long *bitmap) { >> + RAMBlock *block; >> + >> + bitmap_clear(bitmap, 0, last_ram_offset() >> TARGET_PAGE_BITS); >> + rcu_read_lock(); >> + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { >> + if (!migrate_bypass_shared_memory() >> || !qemu_ram_is_shared(block)) { >> + bitmap_set(bitmap, block->offset >> TARGET_PAGE_BITS, > > You should use (block->offset >> TARGET_PAGE_BITS )/ BITS_PER_LONG here.
Hello, Li I might have missed something, could you tell me more? void bitmap_set(unsigned long *map, long start, long nr); I think the @start and @nr are both the number of the bits. thanks, Lai > >> + block->used_length >> TARGET_PAGE_BITS); >> + >> + /* >> + * Count the total number of pages used by ram blocks not >> including >> + * any gaps due to alignment or unplugs. >> + */ >> + migration_dirty_pages += block->used_length >> >> TARGET_PAGE_BITS; >> + } >> + } >> + rcu_read_unlock(); >> } > > Liang