From 8e86db375477910f6859f65ee8fa79ca441df0d0 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 21 Mar 2011 12:09:35 +0100 Subject: [PATCH 031/278] 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 1e86bb4..f618dc8 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -360,6 +360,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 ebed875..cfb575d 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -4642,6 +4642,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