| From foo@baz Tue 14 May 2019 08:29:35 PM CEST |
| From: Will Deacon <will.deacon@arm.com> |
| Date: Tue, 19 Jun 2018 13:53:08 +0100 |
| Subject: locking/atomics, asm-generic: Move some macros from <linux/bitops.h> to a new <linux/bits.h> file |
| |
| From: Will Deacon <will.deacon@arm.com> |
| |
| commit 8bd9cb51daac89337295b6f037b0486911e1b408 upstream. |
| |
| In preparation for implementing the asm-generic atomic bitops in terms |
| of atomic_long_*(), we need to prevent <asm/atomic.h> implementations from |
| pulling in <linux/bitops.h>. A common reason for this include is for the |
| BITS_PER_BYTE definition, so move this and some other BIT() and masking |
| macros into a new header file, <linux/bits.h>. |
| |
| Signed-off-by: Will Deacon <will.deacon@arm.com> |
| Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: linux-arm-kernel@lists.infradead.org |
| Cc: yamada.masahiro@socionext.com |
| Link: https://lore.kernel.org/lkml/1529412794-17720-4-git-send-email-will.deacon@arm.com |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/bitops.h | 22 +--------------------- |
| include/linux/bits.h | 26 ++++++++++++++++++++++++++ |
| 2 files changed, 27 insertions(+), 21 deletions(-) |
| create mode 100644 include/linux/bits.h |
| |
| --- a/include/linux/bitops.h |
| +++ b/include/linux/bitops.h |
| @@ -1,29 +1,9 @@ |
| #ifndef _LINUX_BITOPS_H |
| #define _LINUX_BITOPS_H |
| #include <asm/types.h> |
| +#include <linux/bits.h> |
| |
| -#ifdef __KERNEL__ |
| -#define BIT(nr) (1UL << (nr)) |
| -#define BIT_ULL(nr) (1ULL << (nr)) |
| -#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) |
| -#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) |
| -#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) |
| -#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) |
| -#define BITS_PER_BYTE 8 |
| #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) |
| -#endif |
| - |
| -/* |
| - * Create a contiguous bitmask starting at bit position @l and ending at |
| - * position @h. For example |
| - * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000. |
| - */ |
| -#define GENMASK(h, l) \ |
| - (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) |
| - |
| -#define GENMASK_ULL(h, l) \ |
| - (((~0ULL) - (1ULL << (l)) + 1) & \ |
| - (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) |
| |
| extern unsigned int __sw_hweight8(unsigned int w); |
| extern unsigned int __sw_hweight16(unsigned int w); |
| --- /dev/null |
| +++ b/include/linux/bits.h |
| @@ -0,0 +1,26 @@ |
| +/* SPDX-License-Identifier: GPL-2.0 */ |
| +#ifndef __LINUX_BITS_H |
| +#define __LINUX_BITS_H |
| +#include <asm/bitsperlong.h> |
| + |
| +#define BIT(nr) (1UL << (nr)) |
| +#define BIT_ULL(nr) (1ULL << (nr)) |
| +#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) |
| +#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) |
| +#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) |
| +#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) |
| +#define BITS_PER_BYTE 8 |
| + |
| +/* |
| + * Create a contiguous bitmask starting at bit position @l and ending at |
| + * position @h. For example |
| + * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000. |
| + */ |
| +#define GENMASK(h, l) \ |
| + (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) |
| + |
| +#define GENMASK_ULL(h, l) \ |
| + (((~0ULL) - (1ULL << (l)) + 1) & \ |
| + (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) |
| + |
| +#endif /* __LINUX_BITS_H */ |