summaryrefslogtreecommitdiff
path: root/lib/int_sqrt.c
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2017-11-28 08:12:32 -0800
committerTony Lindgren <tony@atomide.com>2017-11-28 08:12:32 -0800
commitbc686442f8a601bccac1f22506ecdb4b0d62cadd (patch)
treeb224ab4aa2350b233da640f5850f48bc6bfeb2d0 /lib/int_sqrt.c
parent60636a5d0fa2f8bc6d0c23c4027100ba20866f9b (diff)
parentca41e244517d6d3f1600c229ff7ca615049c1e9c (diff)
Merge branch 'dts-fixes' into omap-for-v4.15/fixes-dt
Diffstat (limited to 'lib/int_sqrt.c')
-rw-r--r--lib/int_sqrt.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c
index 1ef4cc344977..e2d329099bf7 100644
--- a/lib/int_sqrt.c
+++ b/lib/int_sqrt.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2013 Davidlohr Bueso <davidlohr.bueso@hp.com>
*
@@ -7,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)
{
@@ -21,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;