53 lines
1.6 KiB
Diff
53 lines
1.6 KiB
Diff
From fd42c439e0c6c68c58408eed999f6e421da33554 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Mon, 21 Mar 2011 12:09:35 +0100
|
|
Subject: [PATCH 031/290] sched: Create schedule_preempt_disabled()
|
|
|
|
Get rid of the ever repeating:
|
|
|
|
preempt_enable_no_resched();
|
|
schedule();
|
|
preempt_disable();
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
---
|
|
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 3bcda08..eeebee9 100644
|
|
--- a/kernel/sched.c
|
|
+++ b/kernel/sched.c
|
|
@@ -4648,6 +4648,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)
|