Release 4.7 include/linux/bitops.h
#ifndef _LINUX_BITOPS_H
#define _LINUX_BITOPS_H
#include <asm/types.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) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
#define GENMASK_ULL(h, l) \
(((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
extern unsigned int __sw_hweight8(unsigned int w);
extern unsigned int __sw_hweight16(unsigned int w);
extern unsigned int __sw_hweight32(unsigned int w);
extern unsigned long __sw_hweight64(__u64 w);
/*
* Include this here because some architectures need generic_ffs/fls in
* scope
*/
#include <asm/bitops.h>
#define for_each_set_bit(bit, addr, size) \
for ((bit) = find_first_bit((addr), (size)); \
(bit) < (size); \
(bit) = find_next_bit((addr), (size), (bit) + 1))
/* same as for_each_set_bit() but use bit as value to start with */
#define for_each_set_bit_from(bit, addr, size) \
for ((bit) = find_next_bit((addr), (size), (bit)); \
(bit) < (size); \
(bit) = find_next_bit((addr), (size), (bit) + 1))
#define for_each_clear_bit(bit, addr, size) \
for ((bit) = find_first_zero_bit((addr), (size)); \
(bit) < (size); \
(bit) = find_next_zero_bit((addr), (size), (bit) + 1))
/* same as for_each_clear_bit() but use bit as value to start with */
#define for_each_clear_bit_from(bit, addr, size) \
for ((bit) = find_next_zero_bit((addr), (size), (bit)); \
(bit) < (size); \
(bit) = find_next_zero_bit((addr), (size), (bit) + 1))
static inline int get_bitmask_order(unsigned int count)
{
int order;
order = fls(count);
return order; /* We could be slightly more clever with -1 here... */
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
pavel machek | pavel machek | 23 | 92.00% | 1 | 33.33% |
yoshinori sato | yoshinori sato | 1 | 4.00% | 1 | 33.33% |
denys vlasenko | denys vlasenko | 1 | 4.00% | 1 | 33.33% |
| Total | 25 | 100.00% | 3 | 100.00% |
static inline int get_count_order(unsigned int count)
{
int order;
order = fls(count) - 1;
if (count & (count - 1))
order++;
return order;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
suresh siddha | suresh siddha | 38 | 97.44% | 1 | 50.00% |
denys vlasenko | denys vlasenko | 1 | 2.56% | 1 | 50.00% |
| Total | 39 | 100.00% | 2 | 100.00% |
static __always_inline unsigned long hweight_long(unsigned long w)
{
return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
andrew morton | andrew morton | 27 | 90.00% | 1 | 33.33% |
akinobu mita | akinobu mita | 2 | 6.67% | 1 | 33.33% |
denys vlasenko | denys vlasenko | 1 | 3.33% | 1 | 33.33% |
| Total | 30 | 100.00% | 3 | 100.00% |
/**
* rol64 - rotate a 64-bit value left
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u64 rol64(__u64 word, unsigned int shift)
{
return (word << shift) | (word >> (64 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* ror64 - rotate a 64-bit value right
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u64 ror64(__u64 word, unsigned int shift)
{
return (word >> shift) | (word << (64 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
alexey dobriyan | alexey dobriyan | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* rol32 - rotate a 32-bit value left
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u32 rol32(__u32 word, unsigned int shift)
{
return (word << shift) | (word >> ((-shift) & 31));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
matt mackall | matt mackall | 30 | 88.24% | 2 | 66.67% |
sasha levin | sasha levin | 4 | 11.76% | 1 | 33.33% |
| Total | 34 | 100.00% | 3 | 100.00% |
/**
* ror32 - rotate a 32-bit value right
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u32 ror32(__u32 word, unsigned int shift)
{
return (word >> shift) | (word << (32 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
matt mackall | matt mackall | 31 | 100.00% | 2 | 100.00% |
| Total | 31 | 100.00% | 2 | 100.00% |
/**
* rol16 - rotate a 16-bit value left
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u16 rol16(__u16 word, unsigned int shift)
{
return (word << shift) | (word >> (16 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
harvey harrison | harvey harrison | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* ror16 - rotate a 16-bit value right
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u16 ror16(__u16 word, unsigned int shift)
{
return (word >> shift) | (word << (16 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
harvey harrison | harvey harrison | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* rol8 - rotate an 8-bit value left
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u8 rol8(__u8 word, unsigned int shift)
{
return (word << shift) | (word >> (8 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
harvey harrison | harvey harrison | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* ror8 - rotate an 8-bit value right
* @word: value to rotate
* @shift: bits to roll
*/
static inline __u8 ror8(__u8 word, unsigned int shift)
{
return (word >> shift) | (word << (8 - shift));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
harvey harrison | harvey harrison | 31 | 100.00% | 1 | 100.00% |
| Total | 31 | 100.00% | 1 | 100.00% |
/**
* sign_extend32 - sign extend a 32-bit value using specified bit as sign-bit
* @value: value to sign extend
* @index: 0 based bit index (0<=index<32) to sign bit
*
* This is safe to use for 16- and 8-bit types as well.
*/
static inline __s32 sign_extend32(__u32 value, int index)
{
__u8 shift = 31 - index;
return (__s32)(value << shift) >> shift;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
andreas herrmann | andreas herrmann | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
/**
* sign_extend64 - sign extend a 64-bit value using specified bit as sign-bit
* @value: value to sign extend
* @index: 0 based bit index (0<=index<64) to sign bit
*/
static inline __s64 sign_extend64(__u64 value, int index)
{
__u8 shift = 63 - index;
return (__s64)(value << shift) >> shift;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
martin kepplinger | martin kepplinger | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
static inline unsigned fls_long(unsigned long l)
{
if (sizeof(l) == 4)
return fls(l);
return fls64(l);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
andrew morton | andrew morton | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
/**
* __ffs64 - find first set bit in a 64 bit word
* @word: The 64 bit word
*
* On 64 bit arches this is a synomyn for __ffs
* The result is not defined if no bits are set, so check that @word
* is non-zero before calling this.
*/
static inline unsigned long __ffs64(u64 word)
{
#if BITS_PER_LONG == 32
if (((u32)word) == 0UL)
return __ffs((u32)(word >> 32)) + 32;
#elif BITS_PER_LONG != 64
#error BITS_PER_LONG not 32 or 64
#endif
return __ffs((unsigned long)word);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
steven whitehouse | steven whitehouse | 62 | 100.00% | 1 | 100.00% |
| Total | 62 | 100.00% | 1 | 100.00% |
#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 bit_clear_unless
#define bit_clear_unless(ptr, _clear, _test) \
({ \
const typeof(*ptr) clear = (_clear), test = (_test); \
typeof(*ptr) old, new; \
\
do { \
old = ACCESS_ONCE(*ptr); \
new = old & ~clear; \
} while (!(old & test) && \
cmpxchg(ptr, old, new) != old); \
\
!(old & test); \
})
#endif
#ifndef find_last_bit
/**
* find_last_bit - find the last set bit in a memory region
* @addr: The address to start the search at
* @size: The number of bits to search
*
* Returns the bit number of the last set bit, or size.
*/
extern unsigned long find_last_bit(const unsigned long *addr,
unsigned long size);
#endif
#endif /* __KERNEL__ */
#endif
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
harvey harrison | harvey harrison | 128 | 16.86% | 1 | 2.70% |
alexey dobriyan | alexey dobriyan | 64 | 8.43% | 1 | 2.70% |
steven whitehouse | steven whitehouse | 63 | 8.30% | 1 | 2.70% |
matt mackall | matt mackall | 61 | 8.04% | 2 | 5.41% |
andrew morton | andrew morton | 60 | 7.91% | 2 | 5.41% |
akinobu mita | akinobu mita | 45 | 5.93% | 5 | 13.51% |
borislav petkov | borislav petkov | 39 | 5.14% | 1 | 2.70% |
suresh siddha | suresh siddha | 38 | 5.01% | 1 | 2.70% |
martin kepplinger | martin kepplinger | 34 | 4.48% | 2 | 5.41% |
andreas herrmann | andreas herrmann | 32 | 4.22% | 1 | 2.70% |
jiri slaby | jiri slaby | 32 | 4.22% | 2 | 5.41% |
pavel machek | pavel machek | 25 | 3.29% | 1 | 2.70% |
srinivas pandruvada | srinivas pandruvada | 21 | 2.77% | 1 | 2.70% |
rusty russell | rusty russell | 18 | 2.37% | 1 | 2.70% |
gong chen | gong chen | 17 | 2.24% | 1 | 2.70% |
theodore tso | theodore tso | 17 | 2.24% | 1 | 2.70% |
guoqing jiang | guoqing jiang | 17 | 2.24% | 1 | 2.70% |
shannon nelson | shannon nelson | 10 | 1.32% | 1 | 2.70% |
pre-git | pre-git | 8 | 1.05% | 1 | 2.70% |
eric dumazet | eric dumazet | 5 | 0.66% | 1 | 2.70% |
sasha levin | sasha levin | 4 | 0.53% | 1 | 2.70% |
david howells | david howells | 4 | 0.53% | 1 | 2.70% |
maxime coquelin | maxime coquelin | 4 | 0.53% | 1 | 2.70% |
alexander van heukelum | alexander van heukelum | 4 | 0.53% | 1 | 2.70% |
denys vlasenko | denys vlasenko | 3 | 0.40% | 1 | 2.70% |
robert richter | robert richter | 2 | 0.26% | 1 | 2.70% |
robert p. j. day | robert p. j. day | 2 | 0.26% | 1 | 2.70% |
yury norov | yury norov | 1 | 0.13% | 1 | 2.70% |
yoshinori sato | yoshinori sato | 1 | 0.13% | 1 | 2.70% |
| Total | 759 | 100.00% | 37 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.