aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/preempt.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/preempt.h')
-rw-r--r--include/linux/preempt.h30
1 files changed, 28 insertions, 2 deletions
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 2e681d9555bd..9dfe0eb1b47a 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -33,12 +33,24 @@ do { \
33 barrier(); \ 33 barrier(); \
34} while (0) 34} while (0)
35 35
36#define preempt_enable_no_resched() \ 36#define __preempt_enable_no_resched() \
37do { \ 37do { \
38 barrier(); \ 38 barrier(); \
39 dec_preempt_count(); \ 39 dec_preempt_count(); \
40} while (0) 40} while (0)
41 41
42#ifdef CONFIG_DEBUG_PREEMPT
43extern void notrace preempt_enable_no_resched(void);
44#else
45# define preempt_enable_no_resched() __preempt_enable_no_resched()
46#endif
47
48#define preempt_enable_and_schedule() \
49do { \
50 __preempt_enable_no_resched(); \
51 schedule(); \
52} while (0)
53
42#define preempt_check_resched() \ 54#define preempt_check_resched() \
43do { \ 55do { \
44 if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ 56 if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
@@ -47,7 +59,7 @@ do { \
47 59
48#define preempt_enable() \ 60#define preempt_enable() \
49do { \ 61do { \
50 preempt_enable_no_resched(); \ 62 __preempt_enable_no_resched(); \
51 barrier(); \ 63 barrier(); \
52 preempt_check_resched(); \ 64 preempt_check_resched(); \
53} while (0) 65} while (0)
@@ -84,6 +96,8 @@ do { \
84 96
85#define preempt_disable() do { } while (0) 97#define preempt_disable() do { } while (0)
86#define preempt_enable_no_resched() do { } while (0) 98#define preempt_enable_no_resched() do { } while (0)
99#define __preempt_enable_no_resched() do { } while (0)
100#define preempt_enable_and_schedule() schedule()
87#define preempt_enable() do { } while (0) 101#define preempt_enable() do { } while (0)
88#define preempt_check_resched() do { } while (0) 102#define preempt_check_resched() do { } while (0)
89 103
@@ -93,6 +107,18 @@ do { \
93 107
94#endif 108#endif
95 109
110#ifdef CONFIG_PREEMPT_RT
111# define preempt_disable_rt() preempt_disable()
112# define preempt_enable_rt() preempt_enable()
113# define preempt_disable_nort() do { } while (0)
114# define preempt_enable_nort() do { } while (0)
115#else
116# define preempt_disable_rt() do { } while (0)
117# define preempt_enable_rt() do { } while (0)
118# define preempt_disable_nort() preempt_disable()
119# define preempt_enable_nort() preempt_enable()
120#endif
121
96#ifdef CONFIG_PREEMPT_NOTIFIERS 122#ifdef CONFIG_PREEMPT_NOTIFIERS
97 123
98struct preempt_notifier; 124struct preempt_notifier;