fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / preempt.h
index a7ad901..d0926d6 100644 (file)
@@ -6,20 +6,21 @@
  * preempt_count (used for kernel preemption, interrupt count, etc.)
  */
 
-#include <linux/config.h>
+#include <linux/thread_info.h>
 #include <linux/linkage.h>
 
-#define preempt_count()        (current_thread_info()->preempt_count)
+#ifdef CONFIG_DEBUG_PREEMPT
+  extern void fastcall add_preempt_count(int val);
+  extern void fastcall sub_preempt_count(int val);
+#else
+# define add_preempt_count(val)        do { preempt_count() += (val); } while (0)
+# define sub_preempt_count(val)        do { preempt_count() -= (val); } while (0)
+#endif
 
-#define inc_preempt_count() \
-do { \
-       preempt_count()++; \
-} while (0)
+#define inc_preempt_count() add_preempt_count(1)
+#define dec_preempt_count() sub_preempt_count(1)
 
-#define dec_preempt_count() \
-do { \
-       preempt_count()--; \
-} while (0)
+#define preempt_count()        (current_thread_info()->preempt_count)
 
 #ifdef CONFIG_PREEMPT
 
@@ -46,6 +47,7 @@ do { \
 #define preempt_enable() \
 do { \
        preempt_enable_no_resched(); \
+       barrier(); \
        preempt_check_resched(); \
 } while (0)