From 0ddc47f5238ebc6edf4bcab22ce8b8f2cb073256 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 21 Mar 2011 12:09:35 +0100 Subject: [PATCH] --- yaml --- r: 288750 b: refs/heads/master c: c5491ea779793f977d282754db478157cc409d82 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/sched.h | 1 + trunk/kernel/sched/core.c | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 81005eb40ce4..f30ae7ffc6f3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7abc63b1bd412f7655b62ef3e35c3c11c5134636 +refs/heads/master: c5491ea779793f977d282754db478157cc409d82 diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index 1a6398424fab..03dd224d0667 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -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; diff --git a/trunk/kernel/sched/core.c b/trunk/kernel/sched/core.c index 91fe6a0e9098..73022395c00e 100644 --- a/trunk/kernel/sched/core.c +++ b/trunk/kernel/sched/core.c @@ -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)