cregit-Linux how code gets into the kernel

Release 4.7 include/linux/bitops.h

Directory: include/linux
#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

PersonTokensPropCommitsCommitProp
pavel machekpavel machek2392.00%133.33%
yoshinori satoyoshinori sato14.00%133.33%
denys vlasenkodenys vlasenko14.00%133.33%
Total25100.00%3100.00%


static inline int get_count_order(unsigned int count) { int order; order = fls(count) - 1; if (count & (count - 1)) order++; return order; }

Contributors

PersonTokensPropCommitsCommitProp
suresh siddhasuresh siddha3897.44%150.00%
denys vlasenkodenys vlasenko12.56%150.00%
Total39100.00%2100.00%


static __always_inline unsigned long hweight_long(unsigned long w) { return sizeof(w) == 4 ? hweight32(w) : hweight64(w); }

Contributors

PersonTokensPropCommitsCommitProp
andrew mortonandrew morton2790.00%133.33%
akinobu mitaakinobu mita26.67%133.33%
denys vlasenkodenys vlasenko13.33%133.33%
Total30100.00%3100.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

PersonTokensPropCommitsCommitProp
alexey dobriyanalexey dobriyan31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
alexey dobriyanalexey dobriyan31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
matt mackallmatt mackall3088.24%266.67%
sasha levinsasha levin411.76%133.33%
Total34100.00%3100.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

PersonTokensPropCommitsCommitProp
matt mackallmatt mackall31100.00%2100.00%
Total31100.00%2100.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

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison31100.00%1100.00%
Total31100.00%1100.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

PersonTokensPropCommitsCommitProp
andreas herrmannandreas herrmann32100.00%1100.00%
Total32100.00%1100.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

PersonTokensPropCommitsCommitProp
martin kepplingermartin kepplinger32100.00%1100.00%
Total32100.00%1100.00%


static inline unsigned fls_long(unsigned long l) { if (sizeof(l) == 4) return fls(l); return fls64(l); }

Contributors

PersonTokensPropCommitsCommitProp
andrew mortonandrew morton32100.00%1100.00%
Total32100.00%1100.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

PersonTokensPropCommitsCommitProp
steven whitehousesteven whitehouse62100.00%1100.00%
Total62100.00%1100.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

PersonTokensPropCommitsCommitProp
harvey harrisonharvey harrison12816.86%12.70%
alexey dobriyanalexey dobriyan648.43%12.70%
steven whitehousesteven whitehouse638.30%12.70%
matt mackallmatt mackall618.04%25.41%
andrew mortonandrew morton607.91%25.41%
akinobu mitaakinobu mita455.93%513.51%
borislav petkovborislav petkov395.14%12.70%
suresh siddhasuresh siddha385.01%12.70%
martin kepplingermartin kepplinger344.48%25.41%
andreas herrmannandreas herrmann324.22%12.70%
jiri slabyjiri slaby324.22%25.41%
pavel machekpavel machek253.29%12.70%
srinivas pandruvadasrinivas pandruvada212.77%12.70%
rusty russellrusty russell182.37%12.70%
gong chengong chen172.24%12.70%
theodore tsotheodore tso172.24%12.70%
guoqing jiangguoqing jiang172.24%12.70%
shannon nelsonshannon nelson101.32%12.70%
pre-gitpre-git81.05%12.70%
eric dumazeteric dumazet50.66%12.70%
sasha levinsasha levin40.53%12.70%
david howellsdavid howells40.53%12.70%
maxime coquelinmaxime coquelin40.53%12.70%
alexander van heukelumalexander van heukelum40.53%12.70%
denys vlasenkodenys vlasenko30.40%12.70%
robert richterrobert richter20.26%12.70%
robert p. j. dayrobert p. j. day20.26%12.70%
yury norovyury norov10.13%12.70%
yoshinori satoyoshinori sato10.13%12.70%
Total759100.00%37100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}