Messages in this thread Patch in this message | | | From | Florian La Roche <> | Subject | [PATCH 1/1] int_sqrt() adjustments | Date | Sun, 27 Jan 2019 18:06:18 +0100 |
| |
From: Florian La Roche <Florian.LaRoche@gmail.com>
int_sqrt() and int_sqrt64(): Add __attribute_const__ and adjust to use (signed) int for the right param of "<<".
Signed-off-by: Florian La Roche <Florian.LaRoche@gmail.com> --- include/linux/kernel.h | 4 ++-- lib/int_sqrt.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 8f0e68e250a7..df03a3cca309 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -513,10 +513,10 @@ extern int __kernel_text_address(unsigned long addr); extern int kernel_text_address(unsigned long addr); extern int func_ptr_is_kernel_text(void *ptr); -unsigned long int_sqrt(unsigned long); +__attribute_const__ unsigned long int_sqrt(unsigned long); #if BITS_PER_LONG < 64 -u32 int_sqrt64(u64 x); +__attribute_const__ u32 int_sqrt64(u64 x); #else static inline u32 int_sqrt64(u64 x) { diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c index 30e0f9770f88..75d930dd1802 100644 --- a/lib/int_sqrt.c +++ b/lib/int_sqrt.c @@ -16,14 +16,14 @@ * * Computes: floor(sqrt(x)) */ -unsigned long int_sqrt(unsigned long x) +__attribute_const__ unsigned long int_sqrt(unsigned long x) { unsigned long b, m, y = 0; if (x <= 1) return x; - m = 1UL << (__fls(x) & ~1UL); + m = 1UL << ((int)__fls(x) & ~1); while (m != 0) { b = y + m; y >>= 1; @@ -45,14 +45,14 @@ EXPORT_SYMBOL(int_sqrt); * is expected. * @x: 64bit integer of which to calculate the sqrt */ -u32 int_sqrt64(u64 x) +__attribute_const__ u32 int_sqrt64(u64 x) { u64 b, m, y = 0; if (x <= ULONG_MAX) return int_sqrt((unsigned long) x); - m = 1ULL << ((fls64(x) - 1) & ~1ULL); + m = 1ULL << ((fls64(x) - 1) & ~1); while (m != 0) { b = y + m; y >>= 1; -- 2.17.1
| |