From 22acbdee13dbc479e9326159d9498348c59c2dea Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 21 Mar 2011 12:09:35 +0100 Subject: [PATCH 031/271] sched: Create schedule_preempt_disabled() Get rid of the ever repeating: preempt_enable_no_resched(); schedule(); preempt_disable(); Signed-off-by: Thomas Gleixner --- include/linux/sched.h | 1 + kernel/sched.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 1c4f3e9..9897fe6 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -359,6 +359,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; diff --git a/kernel/sched.c b/kernel/sched.c index 3d84a43..342114c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -4455,6 +4455,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) -- 1.7.10