Skip to content

Commit

Permalink
sched/preempt: Take away preempt_enable_no_resched() from modules
Browse files Browse the repository at this point in the history
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: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter 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.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Jan 13, 2014
1 parent 9ea4c38 commit 62b94a0
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
22 changes: 20 additions & 2 deletions include/linux/preempt.h
Expand Up @@ -64,7 +64,11 @@ do { \
} while (0)

#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)
#endif

Expand Down Expand Up @@ -93,7 +97,11 @@ do { \
__preempt_schedule_context(); \
} while (0)
#else
#define preempt_enable_notrace() preempt_enable_no_resched_notrace()
#define preempt_enable_notrace() \
do { \
barrier(); \
__preempt_count_dec(); \
} while (0)
#endif

#else /* !CONFIG_PREEMPT_COUNT */
Expand All @@ -116,6 +124,16 @@ do { \

#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

struct preempt_notifier;
Expand Down
5 changes: 4 additions & 1 deletion include/linux/uaccess.h
Expand Up @@ -25,13 +25,16 @@ static inline void pagefault_disable(void)

static inline void pagefault_enable(void)
{
#ifndef CONFIG_PREEMPT
/*
* make sure to issue those last loads/stores before enabling
* the pagefault handler again.
*/
barrier();
preempt_count_dec();
preempt_check_resched();
#else
preempt_enable();
#endif
}

#ifndef ARCH_HAS_NOCACHE_UACCESS
Expand Down

0 comments on commit 62b94a0

Please sign in to comment.