xref: /kvmtool/include/linux/find.h (revision 0febaae00bb6f8c5e694f87d6354fbcbe81e6653)
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