diff mbox series

[1/2] bitmap.h: add comments to BITMAP_LAST_WORD_MASK

Message ID 1532934837-5966-2-git-send-email-wei.w.wang@intel.com (mailing list archive)
State New, archived
Headers show
Series bitmap: some fixes | expand

Commit Message

Wang, Wei W July 30, 2018, 7:13 a.m. UTC
This macro was ported from Linux and we've reached an aggreement there
that the corner case "nbits = 0" is not applicable to this macro, because
when "nbits = 0", which means no bits to mask, this macro is expected to
return 0, instead of 0xffffffff. This patch simply adds a comment above
the macro as a note to users about the corner case.

Signed-off-by: Wei Wang <wei.w.wang@intel.com>
CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
CC: Juan Quintela <quintela@redhat.com>
CC: Peter Xu <peterx@redhat.com>
---
 include/qemu/bitmap.h | 1 +
 1 file changed, 1 insertion(+)

Comments

Wang, Wei W July 30, 2018, 8:02 a.m. UTC | #1
On 07/30/2018 03:13 PM, Wei Wang wrote:
> This macro was ported from Linux and we've reached an aggreement there
> that the corner case "nbits = 0" is not applicable to this macro, because
> when "nbits = 0", which means no bits to mask, this macro is expected to
> return 0, instead of 0xffffffff. This patch simply adds a comment above
> the macro as a note to users about the corner case.
>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
> CC: Juan Quintela <quintela@redhat.com>
> CC: Peter Xu <peterx@redhat.com>
> ---
>   include/qemu/bitmap.h | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h
> index 509eedd..f53c640 100644
> --- a/include/qemu/bitmap.h
> +++ b/include/qemu/bitmap.h
> @@ -60,6 +60,7 @@
>    */
>   
>   #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
> +/* "nbits = 0" is not applicable to this macro. Callers should avoid that. */
>   #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
>   
>   #define DECLARE_BITMAP(name,bits)                  \

A better fix would be to directly change the macro to:  nbits ? (~0UL >> 
(-(nbits) & (BITS_PER_LONG - 1))) : 0,
so that we don't need to fix other callers like bitmap_full, 
bitmap_intersects.

So just post this out for a discussion whether it's preferred to just 
adding note comments as we did for linux or fixing the macro directly.

Best,
Wei
Juan Quintela July 30, 2018, 1:19 p.m. UTC | #2
Wei Wang <wei.w.wang@intel.com> wrote:
> On 07/30/2018 03:13 PM, Wei Wang wrote:
>> This macro was ported from Linux and we've reached an aggreement there
>> that the corner case "nbits = 0" is not applicable to this macro, because
>> when "nbits = 0", which means no bits to mask, this macro is expected to
>> return 0, instead of 0xffffffff. This patch simply adds a comment above
>> the macro as a note to users about the corner case.
>>
>> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
>> CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
>> CC: Juan Quintela <quintela@redhat.com>
>> CC: Peter Xu <peterx@redhat.com>
>> ---
>>   include/qemu/bitmap.h | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h
>> index 509eedd..f53c640 100644
>> --- a/include/qemu/bitmap.h
>> +++ b/include/qemu/bitmap.h
>> @@ -60,6 +60,7 @@
>>    */
>>     #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) &
>> (BITS_PER_LONG - 1)))
>> +/* "nbits = 0" is not applicable to this macro. Callers should avoid that. */
>>   #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
>>     #define DECLARE_BITMAP(name,bits)                  \
>
> A better fix would be to directly change the macro to:  nbits ? (~0UL
>>> (-(nbits) & (BITS_PER_LONG - 1))) : 0,
> so that we don't need to fix other callers like bitmap_full,
> bitmap_intersects.
>
> So just post this out for a discussion whether it's preferred to just
> adding note comments as we did for linux or fixing the macro directly.
>
> Best,
> Wei

On one hand:
a - we have copied it form linux, we don't want to diverge
On the other hand:
b - it is much easier to use if we change the macro

So, it is a tought one.

I slightly preffer b), but will not object to a either.  As you are the
one doing the patch, your choice.

Later, Juan.
Wang, Wei W July 31, 2018, 9:06 a.m. UTC | #3
On 07/30/2018 09:19 PM, Juan Quintela wrote:
> Wei Wang <wei.w.wang@intel.com> wrote:
>> On 07/30/2018 03:13 PM, Wei Wang wrote:
>>> This macro was ported from Linux and we've reached an aggreement there
>>> that the corner case "nbits = 0" is not applicable to this macro, because
>>> when "nbits = 0", which means no bits to mask, this macro is expected to
>>> return 0, instead of 0xffffffff. This patch simply adds a comment above
>>> the macro as a note to users about the corner case.
>>>
>>> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
>>> CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
>>> CC: Juan Quintela <quintela@redhat.com>
>>> CC: Peter Xu <peterx@redhat.com>
>>> ---
>>>    include/qemu/bitmap.h | 1 +
>>>    1 file changed, 1 insertion(+)
>>>
>>> diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h
>>> index 509eedd..f53c640 100644
>>> --- a/include/qemu/bitmap.h
>>> +++ b/include/qemu/bitmap.h
>>> @@ -60,6 +60,7 @@
>>>     */
>>>      #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) &
>>> (BITS_PER_LONG - 1)))
>>> +/* "nbits = 0" is not applicable to this macro. Callers should avoid that. */
>>>    #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
>>>      #define DECLARE_BITMAP(name,bits)                  \
>> A better fix would be to directly change the macro to:  nbits ? (~0UL
>>>> (-(nbits) & (BITS_PER_LONG - 1))) : 0,
>> so that we don't need to fix other callers like bitmap_full,
>> bitmap_intersects.
>>
>> So just post this out for a discussion whether it's preferred to just
>> adding note comments as we did for linux or fixing the macro directly.
>>
>> Best,
>> Wei
> On one hand:
> a - we have copied it form linux, we don't want to diverge
> On the other hand:
> b - it is much easier to use if we change the macro
>
> So, it is a tought one.
>
> I slightly preffer b), but will not object to a either.  As you are the
> one doing the patch, your choice.

Thanks Juan. I plan to choose b - fixing the macro directly.

Best,
Wei
diff mbox series

Patch

diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h
index 509eedd..f53c640 100644
--- a/include/qemu/bitmap.h
+++ b/include/qemu/bitmap.h
@@ -60,6 +60,7 @@ 
  */
 
 #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
+/* "nbits = 0" is not applicable to this macro. Callers should avoid that. */
 #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
 
 #define DECLARE_BITMAP(name,bits)                  \