diff options
-rw-r--r-- | include/linux/preempt.h | 22 | ||||
-rw-r--r-- | include/linux/uaccess.h | 5 |
2 files changed, 24 insertions, 3 deletions
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index a3d9dc8c2c00..dd9ddf8af205 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h | |||
@@ -64,7 +64,11 @@ do { \ | |||
64 | } while (0) | 64 | } while (0) |
65 | 65 | ||
66 | #else | 66 | #else |
67 | #define preempt_enable() preempt_enable_no_resched() | 67 | #define preempt_enable() \ |
68 | do { \ | ||
69 | barrier(); \ | ||
70 | preempt_count_dec(); \ | ||
71 | } while (0) | ||
68 | #define preempt_check_resched() do { } while (0) | 72 | #define preempt_check_resched() do { } while (0) |
69 | #endif | 73 | #endif |
70 | 74 | ||
@@ -93,7 +97,11 @@ do { \ | |||
93 | __preempt_schedule_context(); \ | 97 | __preempt_schedule_context(); \ |
94 | } while (0) | 98 | } while (0) |
95 | #else | 99 | #else |
96 | #define preempt_enable_notrace() preempt_enable_no_resched_notrace() | 100 | #define preempt_enable_notrace() \ |
101 | do { \ | ||
102 | barrier(); \ | ||
103 | __preempt_count_dec(); \ | ||
104 | } while (0) | ||
97 | #endif | 105 | #endif |
98 | 106 | ||
99 | #else /* !CONFIG_PREEMPT_COUNT */ | 107 | #else /* !CONFIG_PREEMPT_COUNT */ |
@@ -116,6 +124,16 @@ do { \ | |||
116 | 124 | ||
117 | #endif /* CONFIG_PREEMPT_COUNT */ | 125 | #endif /* CONFIG_PREEMPT_COUNT */ |
118 | 126 | ||
127 | #ifdef MODULE | ||
128 | /* | ||
129 | * Modules have no business playing preemption tricks. | ||
130 | */ | ||
131 | #undef sched_preempt_enable_no_resched | ||
132 | #undef preempt_enable_no_resched | ||
133 | #undef preempt_enable_no_resched_notrace | ||
134 | #undef preempt_check_resched | ||
135 | #endif | ||
136 | |||
119 | #ifdef CONFIG_PREEMPT_NOTIFIERS | 137 | #ifdef CONFIG_PREEMPT_NOTIFIERS |
120 | 138 | ||
121 | struct preempt_notifier; | 139 | struct preempt_notifier; |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index 9d8cf056e661..ecd3319dac33 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
@@ -25,13 +25,16 @@ static inline void pagefault_disable(void) | |||
25 | 25 | ||
26 | static inline void pagefault_enable(void) | 26 | static inline void pagefault_enable(void) |
27 | { | 27 | { |
28 | #ifndef CONFIG_PREEMPT | ||
28 | /* | 29 | /* |
29 | * make sure to issue those last loads/stores before enabling | 30 | * make sure to issue those last loads/stores before enabling |
30 | * the pagefault handler again. | 31 | * the pagefault handler again. |
31 | */ | 32 | */ |
32 | barrier(); | 33 | barrier(); |
33 | preempt_count_dec(); | 34 | preempt_count_dec(); |
34 | preempt_check_resched(); | 35 | #else |
36 | preempt_enable(); | ||
37 | #endif | ||
35 | } | 38 | } |
36 | 39 | ||
37 | #ifndef ARCH_HAS_NOCACHE_UACCESS | 40 | #ifndef ARCH_HAS_NOCACHE_UACCESS |