home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-generic / bitops / sched.h < prev   
Encoding:
C/C++ Source or Header  |  2006-08-11  |  899 b   |  37 lines

  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]);
  18.     if (unlikely(b[1]))
  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_ */
  37.