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 / linux / preempt.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.4 KB  |  64 lines

  1. #ifndef __LINUX_PREEMPT_H
  2. #define __LINUX_PREEMPT_H
  3.  
  4. /*
  5.  * include/linux/preempt.h - macros for accessing and manipulating
  6.  * preempt_count (used for kernel preemption, interrupt count, etc.)
  7.  */
  8.  
  9. #include <linux/thread_info.h>
  10. #include <linux/linkage.h>
  11.  
  12. #ifdef CONFIG_DEBUG_PREEMPT
  13.   extern void fastcall add_preempt_count(int val);
  14.   extern void fastcall sub_preempt_count(int val);
  15. #else
  16. # define add_preempt_count(val)    do { preempt_count() += (val); } while (0)
  17. # define sub_preempt_count(val)    do { preempt_count() -= (val); } while (0)
  18. #endif
  19.  
  20. #define inc_preempt_count() add_preempt_count(1)
  21. #define dec_preempt_count() sub_preempt_count(1)
  22.  
  23. #define preempt_count()    (current_thread_info()->preempt_count)
  24.  
  25. #ifdef CONFIG_PREEMPT
  26.  
  27. asmlinkage void preempt_schedule(void);
  28.  
  29. #define preempt_disable() \
  30. do { \
  31.     inc_preempt_count(); \
  32.     barrier(); \
  33. } while (0)
  34.  
  35. #define preempt_enable_no_resched() \
  36. do { \
  37.     barrier(); \
  38.     dec_preempt_count(); \
  39. } while (0)
  40.  
  41. #define preempt_check_resched() \
  42. do { \
  43.     if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
  44.         preempt_schedule(); \
  45. } while (0)
  46.  
  47. #define preempt_enable() \
  48. do { \
  49.     preempt_enable_no_resched(); \
  50.     barrier(); \
  51.     preempt_check_resched(); \
  52. } while (0)
  53.  
  54. #else
  55.  
  56. #define preempt_disable()        do { } while (0)
  57. #define preempt_enable_no_resched()    do { } while (0)
  58. #define preempt_enable()        do { } while (0)
  59. #define preempt_check_resched()        do { } while (0)
  60.  
  61. #endif
  62.  
  63. #endif /* __LINUX_PREEMPT_H */
  64.