1#ifndef __LINUX_BITMAP_H__
2#define __LINUX_BITMAP_H__
4#include <linux/kernel.h>
28#define test_and_set_bit(nr, addr) \
29 ({int __old = test_bit(nr, addr); set_bit(nr, addr); __old; })
31#define test_and_clear_bit(nr,addr) \
32 ({ int __old = test_bit(nr, addr); clear_bit(nr,addr); __old;})
34#define bitmap_zero(dst, nbits) \
35 memset(dst, 0, BITS_TO_LONGS(nbits) * sizeof(unsigned long))
37#define bitmap_copy(dst, src, nbits) \
38 memcpy(dst, src, BITS_TO_LONGS(nbits) * sizeof(unsigned long))
59static inline void bitmap_fill(
unsigned long* dst,
unsigned int nbits)
64 memset(dst, 0xff, nlongs *
sizeof(
unsigned long));
66 dst[nlongs - 1] &= (1UL << tail) - 1;
69static inline int bitmap_empty(
const unsigned long* src,
unsigned int nbits)
75 for (i = 0; i < nlongs; i++)
77 unsigned long w = src[i];
79 if (i + 1 == nlongs && tail)
80 w &= (1UL << tail) - 1;
87static inline void bitmap_clear(
unsigned long*
map,
unsigned int start,
int len)
97 if (take > (
unsigned int)
len)
98 take = (
unsigned int)
len;
110 mask = ((1UL << take) - 1) << bits;
142static inline void bitmap_set(
unsigned long*
map,
unsigned int start,
int len)
152 if (take > (
unsigned int)
len)
153 take = (
unsigned int)
len;
158 mask = ((1UL << take) - 1) << bits;
#define BITS_PER_LONG
Definition bordoisila_bits.h:36
#define BITS_TO_LONGS(nr)
Definition bordoisila_bits.h:39
int map
Definition d_mode.c:31
size_t len
Definition initial.c:23
int w
Definition layout.c:118
#define UL(x)
Definition const.h:78