On 12/03/2015 10:39 AM, Andrey Ryabinin wrote: > 2015-12-03 18:30 GMT+03:00 Sasha Levin <[email protected]>: >> > Passing 0 to roundup_pow_of_two would lead to wrapping around and trying to >> > find the last set bit on (unsigned long)(-1), which is obviously wrong. >> > >> > Instead, deal with this case by rounding it up to the closest power of two >> > (2 ** 0). >> > >> > Signed-off-by: Sasha Levin <[email protected]> >> > --- >> > include/linux/log2.h | 3 +++ >> > 1 file changed, 3 insertions(+) >> > >> > diff --git a/include/linux/log2.h b/include/linux/log2.h >> > index fd7ff3d..b6bdf0c 100644 >> > --- a/include/linux/log2.h >> > +++ b/include/linux/log2.h >> > @@ -60,6 +60,9 @@ bool is_power_of_2(unsigned long n) >> > static inline __attribute__((const)) >> > unsigned long __roundup_pow_of_two(unsigned long n) >> > { >> > + if (n == 0) >> > + return 1UL << 0; >> > + > Perhaps we should fix callers instead? > Comment near roundup_pow_of_two() says that result is undefined when n == 0:
That's how I've started doing it, but when it showed up with 3 different callers I figured it's better to fix it at the source. This fix would return a valid value and is working fine with the callers. Thanks, Sasha -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

