Commit 62b94a08 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

sched/preempt: Take away preempt_enable_no_resched() from modules

Discourage drivers/modules to be creative with preemption.

Sadly all is implemented in macros and inline so if they want to do
evil they still can, but at least try and discourage some.
Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
Cc: Eliezer Tamir <eliezer.tamir@linux.intel.com>
Cc: rui.zhang@intel.com
Cc: jacob.jun.pan@linux.intel.com
Cc: Mike Galbraith <bitbucket@online.de>
Cc: hpa@zytor.com
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: lenb@kernel.org
Cc: rjw@rjwysocki.net
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: http://lkml.kernel.org/n/tip-fn7h6vu8wtgxk0ih402qcijx@git.kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 9ea4c380
...@@ -64,7 +64,11 @@ do { \ ...@@ -64,7 +64,11 @@ do { \
} while (0) } while (0)
#else #else
#define preempt_enable() preempt_enable_no_resched() #define preempt_enable() \
do { \
barrier(); \
preempt_count_dec(); \
} while (0)
#define preempt_check_resched() do { } while (0) #define preempt_check_resched() do { } while (0)
#endif #endif
...@@ -93,7 +97,11 @@ do { \ ...@@ -93,7 +97,11 @@ do { \
__preempt_schedule_context(); \ __preempt_schedule_context(); \
} while (0) } while (0)
#else #else
#define preempt_enable_notrace() preempt_enable_no_resched_notrace() #define preempt_enable_notrace() \
do { \
barrier(); \
__preempt_count_dec(); \
} while (0)
#endif #endif
#else /* !CONFIG_PREEMPT_COUNT */ #else /* !CONFIG_PREEMPT_COUNT */
...@@ -116,6 +124,16 @@ do { \ ...@@ -116,6 +124,16 @@ do { \
#endif /* CONFIG_PREEMPT_COUNT */ #endif /* CONFIG_PREEMPT_COUNT */
#ifdef MODULE
/*
* Modules have no business playing preemption tricks.
*/
#undef sched_preempt_enable_no_resched
#undef preempt_enable_no_resched
#undef preempt_enable_no_resched_notrace
#undef preempt_check_resched
#endif
#ifdef CONFIG_PREEMPT_NOTIFIERS #ifdef CONFIG_PREEMPT_NOTIFIERS
struct preempt_notifier; struct preempt_notifier;
......
...@@ -25,13 +25,16 @@ static inline void pagefault_disable(void) ...@@ -25,13 +25,16 @@ static inline void pagefault_disable(void)
static inline void pagefault_enable(void) static inline void pagefault_enable(void)
{ {
#ifndef CONFIG_PREEMPT
/* /*
* make sure to issue those last loads/stores before enabling * make sure to issue those last loads/stores before enabling
* the pagefault handler again. * the pagefault handler again.
*/ */
barrier(); barrier();
preempt_count_dec(); preempt_count_dec();
preempt_check_resched(); #else
preempt_enable();
#endif
} }
#ifndef ARCH_HAS_NOCACHE_UACCESS #ifndef ARCH_HAS_NOCACHE_UACCESS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment