diff options
Diffstat (limited to 'lib/int_sqrt.c')
| -rw-r--r-- | lib/int_sqrt.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c index db0b5aa071fc..e2d329099bf7 100644 --- a/lib/int_sqrt.c +++ b/lib/int_sqrt.c @@ -8,12 +8,13 @@  #include <linux/kernel.h>  #include <linux/export.h> +#include <linux/bitops.h>  /** - * int_sqrt - rough approximation to sqrt + * int_sqrt - computes the integer square root   * @x: integer of which to calculate the sqrt   * - * A very rough approximation to the sqrt() function. + * Computes: floor(sqrt(x))   */  unsigned long int_sqrt(unsigned long x)  { @@ -22,7 +23,7 @@ unsigned long int_sqrt(unsigned long x)  	if (x <= 1)  		return x; -	m = 1UL << (BITS_PER_LONG - 2); +	m = 1UL << (__fls(x) & ~1UL);  	while (m != 0) {  		b = y + m;  		y >>= 1;  | 
