fix types for generic_hweight64
PATCH 1/1 fix types for generic_hweight64
A user reported to me that he had errors compiling a userspace portion of iptables because the u64 data type isn't exported to userspace. This patch changes generic_hweight64 to use unsigned long longs instead of u64s. It also changes the return type to unsigned int, to match the other generic_hweight functions. Please apply.
Cheers!
-Matt
include/linux/bitops.h +4 -3
@@ -108,19 +108,20 @@ static inline unsigned int generic_hweigreturn (res &0x0F ) + ((res >>4 ) &0x0F ); } -static inline unsigned long generic_hweight64 (__u64 w) +static inline unsigned int generic_hweight64 (unsigned long long w) {#if BITS_PER_LONG <64 return generic_hweight32 ((unsigned int )(w >>32 )) +generic_hweight32 ((unsigned int )w);#else -u64 res; +unsigned long long res; res = (w &0x5555555555555555 ) + ((w >>1 ) &0x5555555555555555 ); res = (res &0x3333333333333333 ) + ((res >>2 ) &0x3333333333333333 ); res = (res &0x0F0F0F0F0F0F0F0F ) + ((res >>4 ) &0x0F0F0F0F0F0F0F0F ); res = (res &0x00FF00FF00FF00FF ) + ((res >>8 ) &0x00FF00FF00FF00FF ); res = (res &0x0000FFFF0000FFFF ) + ((res >>16 ) &0x0000FFFF0000FFFF ); -return (res &0x00000000FFFFFFFF ) + ((res >>32 ) &0x00000000FFFFFFFF ); + res = (res &0x00000000FFFFFFFF ) + ((res >>32 ) &0x00000000FFFFFFFF ); +return (unsigned int )res;#endif }