41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
|
From aa5ce24d6193a2379290e79ff6545d75050a5db3 Mon Sep 17 00:00:00 2001
|
||
|
From: Thomas Gleixner <tglx@linutronix.de>
|
||
|
Date: Tue, 13 Dec 2011 21:42:19 +0100
|
||
|
Subject: [PATCH 140/365] sched: ttwu: Return success when only changing the
|
||
|
saved_state value
|
||
|
|
||
|
When a task blocks on a rt lock, it saves the current state in
|
||
|
p->saved_state, so a lock related wake up will not destroy the
|
||
|
original state.
|
||
|
|
||
|
When a real wakeup happens, while the task is running due to a lock
|
||
|
wakeup already, we update p->saved_state to TASK_RUNNING, but we do
|
||
|
not return success, which might cause another wakeup in the waitqueue
|
||
|
code and the task remains in the waitqueue list. Return success in
|
||
|
that case as well.
|
||
|
|
||
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||
|
---
|
||
|
kernel/sched/core.c | 4 +++-
|
||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||
|
index 6b637f1b298f..2228f0c15be5 100644
|
||
|
--- a/kernel/sched/core.c
|
||
|
+++ b/kernel/sched/core.c
|
||
|
@@ -2089,8 +2089,10 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
|
||
|
* if the wakeup condition is true.
|
||
|
*/
|
||
|
if (!(wake_flags & WF_LOCK_SLEEPER)) {
|
||
|
- if (p->saved_state & state)
|
||
|
+ if (p->saved_state & state) {
|
||
|
p->saved_state = TASK_RUNNING;
|
||
|
+ success = 1;
|
||
|
+ }
|
||
|
}
|
||
|
goto out;
|
||
|
}
|
||
|
--
|
||
|
2.28.0
|
||
|
|