> 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
You are right, I have make a mistake by checking the code. Sorry for the noise. BTW. Is it possible to bypass the shared block in the 'ram_find_and_save_block'? I mean no to check if a page is dirty for a shared block, it may make things faster. Liang