1 #ifndef LINUX__FIND_H
2 #define LINUX__FIND_H
3
4 #include <stddef.h>
5
6 #include "linux/bitops.h"
7 #include "linux/bits.h"
8
9 unsigned long _find_next_bit(const unsigned long *addr1,
10 const unsigned long *addr2, unsigned long nbits,
11 unsigned long start, unsigned long invert);
12
13 static inline
find_next_bit(const unsigned long * addr,unsigned long size,unsigned long offset)14 unsigned long find_next_bit(const unsigned long *addr, unsigned long size,
15 unsigned long offset)
16 {
17 if (size >= 0 && size <= BITS_PER_LONG) {
18 unsigned long val;
19
20 if (offset >= size)
21 return size;
22
23 val = *addr & GENMASK(size - 1, offset);
24 return val ? (unsigned long)__builtin_ctzl(val) : size;
25 }
26
27 return _find_next_bit(addr, NULL, size, offset, 0);
28 }
29
30 #endif /* LINUX__FIND_H */
31