From 2ac6fb4253fa815ed17f09a01141b938c826dac9 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Wed, 30 May 2018 09:16:06 -0700 Subject: gpu: nvgpu: posix: Fix ffs() and fls() impl in POSIX The GCC builtins act slightly differently than the Linux versions of these functions. This patch adds the necessary glue to emulate the Linux versions identically. JIRA NVGPU-525 Change-Id: Idadbecdfd516c68f3d3eb20eca495dc1eaa02c5b Signed-off-by: Alex Waterman Reviewed-on: https://git-master.nvidia.com/r/1741951 GVS: Gerrit_Virtual_Submit Reviewed-by: Konsta Holtta Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/posix/bitmap.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/common/posix/bitmap.c b/drivers/gpu/nvgpu/common/posix/bitmap.c index b45838df..f25f6e64 100644 --- a/drivers/gpu/nvgpu/common/posix/bitmap.c +++ b/drivers/gpu/nvgpu/common/posix/bitmap.c @@ -29,14 +29,15 @@ #define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) #define BIT_WORD(nr) ((nr) / BITS_PER_LONG) -unsigned long __nvgpu_posix_fls(unsigned long word) +unsigned long __nvgpu_posix_ffs(unsigned long word) { - return __builtin_clzl(word); + return (__builtin_ffsl(word) - 1) & + ((sizeof(unsigned long) * 8UL) - 1UL); } -unsigned long __nvgpu_posix_ffs(unsigned long word) +unsigned long __nvgpu_posix_fls(unsigned long word) { - return __builtin_ffsl(word); + return ((sizeof(unsigned long) * 8UL) - 1UL) - __builtin_clzl(word); } static unsigned long __find_next_bit(const unsigned long *addr, -- cgit v1.2.2