|
@@ -84,12 +84,20 @@
|
|
|
*/
|
|
|
#define in_nmi() (preempt_count() & NMI_MASK)
|
|
|
|
|
|
+/*
|
|
|
+ * The preempt_count offset after preempt_disable();
|
|
|
+ */
|
|
|
#if defined(CONFIG_PREEMPT_COUNT)
|
|
|
-# define PREEMPT_DISABLE_OFFSET 1
|
|
|
+# define PREEMPT_DISABLE_OFFSET PREEMPT_OFFSET
|
|
|
#else
|
|
|
-# define PREEMPT_DISABLE_OFFSET 0
|
|
|
+# define PREEMPT_DISABLE_OFFSET 0
|
|
|
#endif
|
|
|
|
|
|
+/*
|
|
|
+ * The preempt_count offset after spin_lock()
|
|
|
+ */
|
|
|
+#define PREEMPT_LOCK_OFFSET PREEMPT_DISABLE_OFFSET
|
|
|
+
|
|
|
/*
|
|
|
* The preempt_count offset needed for things like:
|
|
|
*
|
|
@@ -103,7 +111,7 @@
|
|
|
*
|
|
|
* Work as expected.
|
|
|
*/
|
|
|
-#define SOFTIRQ_LOCK_OFFSET (SOFTIRQ_DISABLE_OFFSET + PREEMPT_DISABLE_OFFSET)
|
|
|
+#define SOFTIRQ_LOCK_OFFSET (SOFTIRQ_DISABLE_OFFSET + PREEMPT_LOCK_OFFSET)
|
|
|
|
|
|
/*
|
|
|
* Are we running in atomic context? WARNING: this macro cannot
|
|
@@ -124,7 +132,8 @@
|
|
|
#if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER)
|
|
|
extern void preempt_count_add(int val);
|
|
|
extern void preempt_count_sub(int val);
|
|
|
-#define preempt_count_dec_and_test() ({ preempt_count_sub(1); should_resched(); })
|
|
|
+#define preempt_count_dec_and_test() \
|
|
|
+ ({ preempt_count_sub(1); should_resched(0); })
|
|
|
#else
|
|
|
#define preempt_count_add(val) __preempt_count_add(val)
|
|
|
#define preempt_count_sub(val) __preempt_count_sub(val)
|
|
@@ -184,7 +193,7 @@ do { \
|
|
|
|
|
|
#define preempt_check_resched() \
|
|
|
do { \
|
|
|
- if (should_resched()) \
|
|
|
+ if (should_resched(0)) \
|
|
|
__preempt_schedule(); \
|
|
|
} while (0)
|
|
|
|