Re: [PATCH v3 1/5] lib/bitmap: add bitmap_{set,get}_value()
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2023-07-18 17:21:26
Also in:
lkml
On Tue, Jul 18, 2023 at 10:03:25AM -0700, Yury Norov wrote:
On Tue, Jul 18, 2023 at 05:01:28PM +0300, Andy Shevchenko wrote:quoted
On Tue, Jul 18, 2023 at 11:30:00AM +0200, Alexander Potapenko wrote:
...
quoted
The idea behind is to eliminate the code completely for the cases nbits != 0. In your case the dynamic check will be there. That's what we want to avoid.Alexander is right - we can't avoid testing against 0 if we need to test for 0... In case of other functions we have inline and outline implementations, controlled by small_const_nbits(). As you can see, the small_const_nbits() tests against 0 explicitly, although it's free at compile time. But if nbits == 0, we pick outline version of a function regardless. On their turn, outline versions again do their test against nbits == 0, but most of the time implicitly. In case of bitmap_set_val, we are touching at max 2 words, and there's no reason for outline version, so we have to test nbits against 0 inside inline code. Having all that in mind, and because nbits == 0 is most likely an error we'd follow the following rules: - no memory must be touched as we're potentially in error condition, and pointer may be corrupted; - the cost of the check must be as minimal as possible. So I suggest: if (unlikely(nbits == 0)) return; For readers that would literally mean: we don't expect that, and we find it suspicious, but we'll handle that as correct as we can.
Okay, thank you for elaborated answer. -- With Best Regards, Andy Shevchenko _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel