rounddown_pow_of_2 inclusion into log2.h
rday,
Any plans on including what Andrew Morton suggested in the near
future?
Think you have had enough time to convince yourself ;)
(Sorry, had put kj in bcc in prev mail by mistake)
Vignesh
Quoted 13 lines · Andrew Morton
Review
Quoted 8 lines · On Thu, 25 Jan 2007 04:32:12 -0500 (EST) "Robert P. J. Day"…
(quoted diff) +8
-0+/* + * round down to nearest power of two + */ +static inline __attribute__((const)) +unsigned long __rounddown_pow_of_two(unsigned long n) +{ + return 1UL << (fls_long(n) - 1); +}So
__rounddown_pow_of_two(16)returns 8?
it does? but if that was true, so would 17, and 18, and 19 ... i didn't actually test this since it seemed so straightforward. doesn't fls_long() return the most significant bit? oh, wait ... reading further ...
Quoted 5 lines
Review unsigned long __roundup_pow_of_two(unsigned
Quoted 5 lines
/**
* ilog2 - log of base 2 of 32-bit or a 64-bit unsigned value
* @n - parameter(quoted diff) +0
-0@@ -154,4 +174,20 @@ unsigned long __roundup_pow_of_two(unsigned
long n)
Quoted 5 lines
Review unsigned long __roundup_pow_of_two(unsigned · line 178
Quoted 5 lines
(quoted diff) +2
-0__roundup_pow_of_two(n) \ ) +/** + * rounddown_pow_of_two - round the given value down to nearest
power of two
Quoted 5 lines
Review unsigned long __roundup_pow_of_two(unsigned · line 183
Quoted 5 lines
(quoted diff) +5
-0+ * @n - parameter + * + * round the given value down to the nearest power of two + * - the result is undefined when n = 0 + * - this can be used to initialise global variables from constant
data
Quoted 12 lines
Review unsigned long __roundup_pow_of_two(unsigned · line 191
Quoted 8 lines
(quoted diff) +8
-0+ */ +#define rounddown_pow_of_two(n) \ +( \ + __builtin_constant_p(n) ? ( \ + (n = 1) ? 0 : \ + (1UL << ilog2(n)) : \ + __rounddown_pow_of_two(n) \ + )But (1UL << ilog2(16)) returns 16?
Quoted 1 line
And, afiact, your
__rounddown_pow_of_two()is basically equivalent to
(1UL
Quoted 1 line
<< ilog2(n)) anyway. So a suitable (and less buggy) implementation
might be
Quoted 5 lines
static inline unsigned long
rounddown_pow_of_two(unsigned long n){ return (n = 1) ? 0 : (1UL << ilog2(n)); }
i think you're right. it's been a long day so give me a few minutes to convince myself.
rday
Signature · 17 lines
==================================== Robert P. J. Day Linux Consulting, Training and Annoying Kernel Pedantry Waterloo, Ontario, CANADA -- Vignesh Babu BM _____________________________________________________________ "Why is it that every time I'm with you, makes me believe in magic?" _______________________________________________ REMINDER: this mailing list moved to vger.kernel.org and current one will be discontinued soon. To resubscribe, send email to [email protected] with "subscribe kernel-janitors" in message body and follow instructions. Kernel-janitors mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/kernel-janitors