-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 02/10/2010 02:52 AM, OHMURA Kei wrote: > for (i = 0; i < len; i++) { > - c = bitmap[i]; > - while (c > 0) { > - j = ffsl(c) - 1; > - c &= ~(1u << j); > - page_number = i * 8 + j; > - addr1 = page_number * TARGET_PAGE_SIZE; > - addr = offset + addr1; > - ram_addr = cpu_get_physical_page_desc(addr); > - cpu_physical_memory_set_dirty(ram_addr); > - n++; > + if (bitmap_ul[i] != 0) { > + c = le_bswap(bitmap_ul[i], HOST_LONG_BITS); > + while (c > 0) { > + j = ffsl(c) - 1; > + c &= ~(1ul << j); > + page_number = i * HOST_LONG_BITS + j; > + addr1 = page_number * TARGET_PAGE_SIZE; > + addr = offset + addr1; > + ram_addr = cpu_get_physical_page_desc(addr); > + cpu_physical_memory_set_dirty(ram_addr); > + } If you're optimizing this code you might want to do it all. The compiler might not see through the bswap call and create unnecessary data dependencies. Especially problematic if the bitmap is really sparse. Also, the outer test is != while the inner test is >. Be consistent. I suggest to replace the inner loop with do { ... } while (c != 0); Depending on how sparse the bitmap is populated this might reduce the number of data dependencies quite a bit. - -- ➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAktysDoACgkQ2ijCOnn/RHS2zwCfcj+G0S5ZAEA8MjGAVI/rKjJJ +0oAnA4njIrwx3/5+o43ekYeYXSNyei0 =ukkz -----END PGP SIGNATURE----- -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html