Message ID | 1533031278-5615-1-git-send-email-wei.w.wang@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] bitmap: fix BITMAP_LAST_WORD_MASK | expand |
Wei Wang <wei.w.wang@intel.com> wrote: > When "nbits = 0", which means no bits to mask, this macro is expected to > return 0, instead of 0xffffffff. This patch changes the macro to return > 0 when there is no bit needs to be masked. > > Signed-off-by: Wei Wang <wei.w.wang@intel.com> > CC: Juan Quintela <quintela@redhat.com> > CC: Dr. David Alan Gilbert <dgilbert@redhat.com> > CC: Peter Xu <peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com>
On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: > When "nbits = 0", which means no bits to mask, this macro is expected to > return 0, instead of 0xffffffff. This patch changes the macro to return > 0 when there is no bit needs to be masked. > > Signed-off-by: Wei Wang <wei.w.wang@intel.com> > CC: Juan Quintela <quintela@redhat.com> > CC: Dr. David Alan Gilbert <dgilbert@redhat.com> > CC: Peter Xu <peterx@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Is there any existing path that can trigger this nbits==0? > --- > include/qemu/bitmap.h | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > v1->v2 ChangeLog: > - fix the macro directly, instead of fixing the callers one by one. > > diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h > index 509eedd..9372423 100644 > --- a/include/qemu/bitmap.h > +++ b/include/qemu/bitmap.h > @@ -60,7 +60,10 @@ > */ > > #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) > -#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) > +#define BITMAP_LAST_WORD_MASK(nbits) \ > +( \ > + nbits ? (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) : 0 \ > +) > > #define DECLARE_BITMAP(name,bits) \ > unsigned long name[BITS_TO_LONGS(bits)] > -- > 2.7.4 > Regards,
On 08/07/2018 03:39 PM, Peter Xu wrote: > On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: >> When "nbits = 0", which means no bits to mask, this macro is expected to >> return 0, instead of 0xffffffff. This patch changes the macro to return >> 0 when there is no bit needs to be masked. >> >> Signed-off-by: Wei Wang <wei.w.wang@intel.com> >> CC: Juan Quintela <quintela@redhat.com> >> CC: Dr. David Alan Gilbert <dgilbert@redhat.com> >> CC: Peter Xu <peterx@redhat.com> > Reviewed-by: Peter Xu <peterx@redhat.com> > > Is there any existing path that can trigger this nbits==0? Not sure about other bitmap APIs which call this macro. But it happens in the patches we are working on, which use bitmap_count_one. It would be good to have the macro itself handle this corner case, so that callers won't need to worry about that. Best, Wei
* Wei Wang (wei.w.wang@intel.com) wrote: > On 08/07/2018 03:39 PM, Peter Xu wrote: > > On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: > > > When "nbits = 0", which means no bits to mask, this macro is expected to > > > return 0, instead of 0xffffffff. This patch changes the macro to return > > > 0 when there is no bit needs to be masked. > > > > > > Signed-off-by: Wei Wang <wei.w.wang@intel.com> > > > CC: Juan Quintela <quintela@redhat.com> > > > CC: Dr. David Alan Gilbert <dgilbert@redhat.com> > > > CC: Peter Xu <peterx@redhat.com> > > Reviewed-by: Peter Xu <peterx@redhat.com> > > > > Is there any existing path that can trigger this nbits==0? > > Not sure about other bitmap APIs which call this macro. But it happens in > the patches we are working on, which use bitmap_count_one. > It would be good to have the macro itself handle this corner case, so that > callers won't need to worry about that. Given that I see you're having a similar discussion on the kernel list we should see how that pans out before making qemu changes. Dave > Best, > Wei -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On Tue, Aug 07, 2018 at 04:21:15PM +0800, Wei Wang wrote: > On 08/07/2018 03:39 PM, Peter Xu wrote: > > On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: > > > When "nbits = 0", which means no bits to mask, this macro is expected to > > > return 0, instead of 0xffffffff. This patch changes the macro to return > > > 0 when there is no bit needs to be masked. > > > > > > Signed-off-by: Wei Wang <wei.w.wang@intel.com> > > > CC: Juan Quintela <quintela@redhat.com> > > > CC: Dr. David Alan Gilbert <dgilbert@redhat.com> > > > CC: Peter Xu <peterx@redhat.com> > > Reviewed-by: Peter Xu <peterx@redhat.com> > > > > Is there any existing path that can trigger this nbits==0? > > Not sure about other bitmap APIs which call this macro. But it happens in > the patches we are working on, which use bitmap_count_one. > It would be good to have the macro itself handle this corner case, so that > callers won't need to worry about that. Yeah that makes sense. Asked since that would matter on whether it's 3.0 material, then it's possibly not. Regards,
On 08/07/2018 08:17 PM, Peter Xu wrote: > On Tue, Aug 07, 2018 at 04:21:15PM +0800, Wei Wang wrote: >> On 08/07/2018 03:39 PM, Peter Xu wrote: >>> On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: >>>> When "nbits = 0", which means no bits to mask, this macro is expected to >>>> return 0, instead of 0xffffffff. This patch changes the macro to return >>>> 0 when there is no bit needs to be masked. >>>> >>>> Signed-off-by: Wei Wang <wei.w.wang@intel.com> >>>> CC: Juan Quintela <quintela@redhat.com> >>>> CC: Dr. David Alan Gilbert <dgilbert@redhat.com> >>>> CC: Peter Xu <peterx@redhat.com> >>> Reviewed-by: Peter Xu <peterx@redhat.com> >>> >>> Is there any existing path that can trigger this nbits==0? >> Not sure about other bitmap APIs which call this macro. But it happens in >> the patches we are working on, which use bitmap_count_one. >> It would be good to have the macro itself handle this corner case, so that >> callers won't need to worry about that. > Yeah that makes sense. Asked since that would matter on whether it's > 3.0 material, then it's possibly not. > OK, thanks for checking. Best, Wei
On 08/07/2018 05:53 PM, Dr. David Alan Gilbert wrote: > * Wei Wang (wei.w.wang@intel.com) wrote: >> On 08/07/2018 03:39 PM, Peter Xu wrote: >>> On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: >>>> When "nbits = 0", which means no bits to mask, this macro is expected to >>>> return 0, instead of 0xffffffff. This patch changes the macro to return >>>> 0 when there is no bit needs to be masked. >>>> >>>> Signed-off-by: Wei Wang <wei.w.wang@intel.com> >>>> CC: Juan Quintela <quintela@redhat.com> >>>> CC: Dr. David Alan Gilbert <dgilbert@redhat.com> >>>> CC: Peter Xu <peterx@redhat.com> >>> Reviewed-by: Peter Xu <peterx@redhat.com> >>> >>> Is there any existing path that can trigger this nbits==0? >> Not sure about other bitmap APIs which call this macro. But it happens in >> the patches we are working on, which use bitmap_count_one. >> It would be good to have the macro itself handle this corner case, so that >> callers won't need to worry about that. > Given that I see you're having a similar discussion on the kernel list > we should see how that pans out before making qemu changes. OK. The situation is a little different in Linux, because all the callers there have already taken the responsibilities to avoid the "nbits=0" corner case, that's also the reason that they want to stick with the old way. Here in QEMU, most callers (e.g. bitmap_count_one, bitmap_fill, bitmap_intersects) haven't checked that, so fixing the macro itself might be a better choice here. Best, Wei
* Wei Wang (wei.w.wang@intel.com) wrote: > On 08/07/2018 05:53 PM, Dr. David Alan Gilbert wrote: > > * Wei Wang (wei.w.wang@intel.com) wrote: > > > On 08/07/2018 03:39 PM, Peter Xu wrote: > > > > On Tue, Jul 31, 2018 at 06:01:18PM +0800, Wei Wang wrote: > > > > > When "nbits = 0", which means no bits to mask, this macro is expected to > > > > > return 0, instead of 0xffffffff. This patch changes the macro to return > > > > > 0 when there is no bit needs to be masked. > > > > > > > > > > Signed-off-by: Wei Wang <wei.w.wang@intel.com> > > > > > CC: Juan Quintela <quintela@redhat.com> > > > > > CC: Dr. David Alan Gilbert <dgilbert@redhat.com> > > > > > CC: Peter Xu <peterx@redhat.com> > > > > Reviewed-by: Peter Xu <peterx@redhat.com> > > > > > > > > Is there any existing path that can trigger this nbits==0? > > > Not sure about other bitmap APIs which call this macro. But it happens in > > > the patches we are working on, which use bitmap_count_one. > > > It would be good to have the macro itself handle this corner case, so that > > > callers won't need to worry about that. > > Given that I see you're having a similar discussion on the kernel list > > we should see how that pans out before making qemu changes. > > OK. > The situation is a little different in Linux, because all the callers there > have already taken the responsibilities to avoid the "nbits=0" corner case, > that's also the reason that they want to stick with the old way. Here in > QEMU, most callers (e.g. bitmap_count_one, bitmap_fill, bitmap_intersects) > haven't checked that, so fixing the macro itself might be a better choice > here. Where we have macros or functions that have the same name as the kernel then we should keep them consistent with the kernel unless we have a VERY good reason to make them differ; that's especially true if the difference is a small subtle difference like this; otherwise it would be too easy for someone used to QEMU or the kernel to introduce a bad mistake in the other one because they think they're using the same thing. Dave > Best, > Wei -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h index 509eedd..9372423 100644 --- a/include/qemu/bitmap.h +++ b/include/qemu/bitmap.h @@ -60,7 +60,10 @@ */ #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) -#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) +#define BITMAP_LAST_WORD_MASK(nbits) \ +( \ + nbits ? (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) : 0 \ +) #define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]
When "nbits = 0", which means no bits to mask, this macro is expected to return 0, instead of 0xffffffff. This patch changes the macro to return 0 when there is no bit needs to be masked. Signed-off-by: Wei Wang <wei.w.wang@intel.com> CC: Juan Quintela <quintela@redhat.com> CC: Dr. David Alan Gilbert <dgilbert@redhat.com> CC: Peter Xu <peterx@redhat.com> --- include/qemu/bitmap.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) v1->v2 ChangeLog: - fix the macro directly, instead of fixing the callers one by one.