]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
include/log2.h: fix rounddown_pow_of_two(1)
authorAndrei Warkentin <andreiw@vmware.com>
Fri, 2 Dec 2011 03:12:12 +0000 (14:12 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 6 Dec 2011 04:05:30 +0000 (15:05 +1100)
1 is a power of two, therefore rounddown_pow_of_two(1) should return 1.
It does in case the argument is a variable but in case it's a constant it
behaves wrong and returns 0.  Probably nobody ever did it so this was
never noticed, however net/drivers/vmxnet3 with latest GCC does and breaks
on unicpu systems.

This is similar to Rolf's patch to roundup_pow_of_two(1).

Cc: Rolf Eike Beer <eike-kernel@sf-tec.de>
Reviewed-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Andrei Warkentin <andreiw@vmware.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/log2.h

index 25b808631cd92c50d10cf6a31b2d9b9942b62ac9..ccda848411c8f1dd0462acffee7c12bca53edb2a 100644 (file)
@@ -185,7 +185,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
 #define rounddown_pow_of_two(n)                        \
 (                                              \
        __builtin_constant_p(n) ? (             \
-               (n == 1) ? 0 :                  \
+               (n == 1) ? 1 :                  \
                (1UL << ilog2(n))) :            \
        __rounddown_pow_of_two(n)               \
  )