aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-02-23 18:52:21 -0500
committerThomas Gleixner <tglx@linutronix.de>2011-02-25 14:24:22 -0500
commit8eb90c30e0e815a1308828352eabd03ca04229dd (patch)
treecc41c26975f8ab4e9f3ed734f1bdad9b3774685a /kernel/sched.c
parent0c4602ff88d6d6ef0ee6d228ee9acaa6448ff6f5 (diff)
sched: Switch wait_task_inactive to schedule_hrtimeout()
When we force thread hard and soft interrupts the startup of ksoftirqd would hang in kthread_bind() when wait_task_inactive() calls schedule_timeout_uninterruptible() because there is no softirq yet which will wake us up. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <20110223234956.677109139@linutronix.de>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 18d38e4ec7ba..66ca5d9ba83c 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2224,7 +2224,10 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
2224 * yield - it could be a while. 2224 * yield - it could be a while.
2225 */ 2225 */
2226 if (unlikely(on_rq)) { 2226 if (unlikely(on_rq)) {
2227 schedule_timeout_uninterruptible(1); 2227 ktime_t to = ktime_set(0, NSEC_PER_SEC/HZ);
2228
2229 set_current_state(TASK_UNINTERRUPTIBLE);
2230 schedule_hrtimeout(&to, HRTIMER_MODE_REL);
2228 continue; 2231 continue;
2229 } 2232 }
2230 2233