On Wed, Jul 17, 2019 at 11:11:55AM +0800, Peter Xu wrote: >On Wed, Jul 17, 2019 at 10:46:37AM +0800, Wei Yang wrote: >> On Wed, Jul 17, 2019 at 09:59:10AM +0800, Peter Xu wrote: >> >On Wed, Jul 17, 2019 at 09:29:02AM +0800, Wei Yang wrote: >> >> The value left in nr is the number of bits for the last word, which >> >> could be calculate the last word mask directly. >> > >> >Is it true even if start does not align to BITS_PER_LONG? >> > >> >> Yes. Let me see how to explain this. >> >> When you look into the definition of BITMAP_LAST_WORD_MASK, it takes the >> number of total bits and give the number of bits in last word. While the >> value >> matters for the input is the number of last word. This means the following >> equation stands >> >> BITMAP_LAST_WORD_MASK(size) == BITMAP_FIRST_WORD_MASK(size % BITS_PER_LONG) >> >> Now let look at the calculation for nr. In each iteration, nr will be >> truncated to be aligned to BITS_PER_LONG. So when we exit the loop, nr keeps >> the number of bits in last word. >> >> So we can leverage the result, no matter the start is aligned or not. > >Yes, you are right. > >Do you have plan to write some unit tests for these functions? :) > >It'll be tests/test-bitmap.c. IMHO the test cases could be even more >helpful to the QEMU project as a whole comparing to this patch to >guarantee changes like your patch won't break.
Let me have a try. :-) > >At the meantime I think you can also do that to bitmap_set_atomic. > >Thanks, > >-- >Peter Xu -- Wei Yang Help you, Help me