4,23 → 4,12 |
|
#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) (((U32_C(1) << ((h) - (l) + 1)) - 1) << (l)) |
#define GENMASK_ULL(h, l) (((U64_C(1) << ((h) - (l) + 1)) - 1) << (l)) |
|
extern unsigned int __sw_hweight8(unsigned int w); |
extern unsigned int __sw_hweight16(unsigned int w); |
extern unsigned int __sw_hweight32(unsigned int w); |
196,21 → 185,6 |
|
#ifdef __KERNEL__ |
|
#ifndef set_mask_bits |
#define set_mask_bits(ptr, _mask, _bits) \ |
({ \ |
const typeof(*ptr) mask = (_mask), bits = (_bits); \ |
typeof(*ptr) old, new; \ |
\ |
do { \ |
old = ACCESS_ONCE(*ptr); \ |
new = (old & ~mask) | bits; \ |
} while (cmpxchg(ptr, old, new) != old); \ |
\ |
new; \ |
}) |
#endif |
|
#ifndef find_last_bit |
/** |
* find_last_bit - find the last set bit in a memory region |