Commit | Line | Data |
---|---|---|
6d29ea23 AM |
1 | #ifndef _ASM_GENERIC_BITOPS_SCHED_H_ |
2 | #define _ASM_GENERIC_BITOPS_SCHED_H_ | |
3 | ||
4 | #include <linux/compiler.h> /* unlikely() */ | |
5 | #include <asm/types.h> | |
6 | ||
7 | /* | |
8 | * Every architecture must define this function. It's the fastest | |
9 | * way of searching a 140-bit bitmap where the first 100 bits are | |
10 | * unlikely to be set. It's guaranteed that at least one of the 140 | |
11 | * bits is cleared. | |
12 | */ | |
13 | static inline int sched_find_first_bit(const unsigned long *b) | |
14 | { | |
15 | #if BITS_PER_LONG == 64 | |
16 | if (unlikely(b[0])) | |
17 | return __ffs(b[0]); | |
beed33a8 | 18 | if (likely(b[1])) |
6d29ea23 AM |
19 | return __ffs(b[1]) + 64; |
20 | return __ffs(b[2]) + 128; | |
21 | #elif BITS_PER_LONG == 32 | |
22 | if (unlikely(b[0])) | |
23 | return __ffs(b[0]); | |
24 | if (unlikely(b[1])) | |
25 | return __ffs(b[1]) + 32; | |
26 | if (unlikely(b[2])) | |
27 | return __ffs(b[2]) + 64; | |
28 | if (b[3]) | |
29 | return __ffs(b[3]) + 96; | |
30 | return __ffs(b[4]) + 128; | |
31 | #else | |
32 | #error BITS_PER_LONG not defined | |
33 | #endif | |
34 | } | |
35 | ||
36 | #endif /* _ASM_GENERIC_BITOPS_SCHED_H_ */ |