sched/rt: Add schedule_preempt_disabled()
Commit-ID: c5491ea779793f977d282754db478157cc409d82 Gitweb: http://git.kernel.org/tip/c5491ea779793f977d282754db478157cc409d82 Author: Thomas Gleixner <[email protected]> AuthorDate: Mon, 21 Mar 2011 12:09:35 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Thu, 1 Mar 2012 10:28:03 +0100
sched/rt: Add schedule_preempt_disabled()
Add helper to get rid of the ever repeating:
preempt_enable_no_resched();
schedule();
preempt_disable();patterns.
Signed-off-by Thomas Gleixner <[email protected]>
Acked-by Peter Zijlstra <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- include/linux/sched.h | 1 + kernel/sched/core.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 0 deletions(-)
include/linux/sched.h +1 -0
@@ -361,6 +361,7 @@ extern signed long schedule_timeout_interruptible(signed long timeout);extern signed long schedule_timeout_killable (signed long timeout);extern signed long schedule_timeout_uninterruptible (signed long timeout); asmlinkage void schedule(void); +extern void schedule_preempt_disabled (void );extern int mutex_spin_on_owner (struct mutex *lock,struct task_struct *owner);struct nsproxy ;
kernel/sched/core.c +12 -0
@@ -3246,6 +3246,18 @@ asmlinkage void __sched schedule(void) }EXPORT_SYMBOL (schedule); +/** +* schedule_preempt_disabled - called with preemption disabled +* +* Returns with preemption disabled. Note: preempt_count must be 1 +*/ +void __sched schedule_preempt_disabled(void) +{ +preempt_enable_no_resched (); +schedule (); +preempt_disable (); +} +#ifdef CONFIG_MUTEX_SPIN_ON_OWNER static inline bool owner_running (struct mutex *lock,struct task_struct *owner)