blob: 1023e2a4bd372fae7f4568f3d85c707518b2bb84 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Arnd Bergmannc31ae4b2009-05-13 22:56:25 +00002#ifndef __ASM_GENERIC_BITS_PER_LONG
3#define __ASM_GENERIC_BITS_PER_LONG
4
David Howells8a1ab312012-10-04 18:20:15 +01005#include <uapi/asm-generic/bitsperlong.h>
Arnd Bergmannc31ae4b2009-05-13 22:56:25 +00006
Arnd Bergmannc31ae4b2009-05-13 22:56:25 +00007
8#ifdef CONFIG_64BIT
9#define BITS_PER_LONG 64
10#else
11#define BITS_PER_LONG 32
12#endif /* CONFIG_64BIT */
13
14/*
15 * FIXME: The check currently breaks x86-64 build, so it's
16 * temporarily disabled. Please fix x86-64 and reenable
17 */
18#if 0 && BITS_PER_LONG != __BITS_PER_LONG
19#error Inconsistent word size. Check asm/bitsperlong.h
20#endif
21
Denys Vlasenko133fd9f2012-05-31 16:26:08 -070022#ifndef BITS_PER_LONG_LONG
23#define BITS_PER_LONG_LONG 64
24#endif
25
Yury Norov586eaeb2021-05-06 18:02:56 -070026/*
27 * small_const_nbits(n) is true precisely when it is known at compile-time
28 * that BITMAP_SIZE(n) is 1, i.e. 1 <= n <= BITS_PER_LONG. This allows
29 * various bit/bitmap APIs to provide a fast inline implementation. Bitmaps
30 * of size 0 are very rare, and a compile-time-known-size 0 is most likely
31 * a sign of error. They will be handled correctly by the bit/bitmap APIs,
32 * but using the out-of-line functions, so that the inline implementations
33 * can unconditionally dereference the pointer(s).
34 */
35#define small_const_nbits(nbits) \
36 (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG && (nbits) > 0)
37
Arnd Bergmannc31ae4b2009-05-13 22:56:25 +000038#endif /* __ASM_GENERIC_BITS_PER_LONG */