Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARC: fix __ffs return value to avoid build warnings

| CC mm/nobootmem.o
|In file included from ./include/asm-generic/bug.h:18:0,
| from ./arch/arc/include/asm/bug.h:32,
| from ./include/linux/bug.h:5,
| from ./include/linux/mmdebug.h:5,
| from ./include/linux/gfp.h:5,
| from ./include/linux/slab.h:15,
| from mm/nobootmem.c:14:
|mm/nobootmem.c: In function '__free_pages_memory':
|./include/linux/kernel.h:845:29: warning: comparison of distinct pointer types lacks a cast
| (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
| ^
|./include/linux/kernel.h:859:4: note: in expansion of macro '__typecheck'
| (__typecheck(x, y) && __no_side_effects(x, y))
| ^~~~~~~~~~~
|./include/linux/kernel.h:869:24: note: in expansion of macro '__safe_cmp'
| __builtin_choose_expr(__safe_cmp(x, y), \
| ^~~~~~~~~~
|./include/linux/kernel.h:878:19: note: in expansion of macro '__careful_cmp'
| #define min(x, y) __careful_cmp(x, y, <)
| ^~~~~~~~~~~~~
|mm/nobootmem.c:104:11: note: in expansion of macro 'min'
| order = min(MAX_ORDER - 1UL, __ffs(start));

Change __ffs return value from 'int' to 'unsigned long' as it
is done in other implementations (like asm-generic, x86, etc...)
to avoid build-time warnings in places where type is strictly
checked.

As __ffs may return values in [0-31] interval changing return
type to unsigned is valid.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

authored by

Eugeniy Paltsev and committed by
Vineet Gupta
4e868f84 7dd380c3

+3 -3
+3 -3
arch/arc/include/asm/bitops.h
··· 340 340 /* 341 341 * __ffs: Similar to ffs, but zero based (0-31) 342 342 */ 343 - static inline __attribute__ ((const)) int __ffs(unsigned long word) 343 + static inline __attribute__ ((const)) unsigned long __ffs(unsigned long word) 344 344 { 345 345 if (!word) 346 346 return word; ··· 400 400 /* 401 401 * __ffs: Similar to ffs, but zero based (0-31) 402 402 */ 403 - static inline __attribute__ ((const)) int __ffs(unsigned long x) 403 + static inline __attribute__ ((const)) unsigned long __ffs(unsigned long x) 404 404 { 405 - int n; 405 + unsigned long n; 406 406 407 407 asm volatile( 408 408 " ffs.f %0, %1 \n" /* 0:31; 31(Z) if src 0 */