aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2008-02-13 09:45:39 -0500
committerIngo Molnar <mingo@elte.hu>2008-02-13 09:45:39 -0500
commit4cf5d77a6eefaa7a464bc34e8cb767356f10fd74 (patch)
treead011b73207b6c8523189b873d8b1c3757d84e12 /kernel/sched.c
parent8ed3699682be75fd68281239c202ad3830f9c72d (diff)
sched: fix incorrect irq lock usage in normalize_rt_tasks()
lockdep spotted this bogus irq locking. normalize_rt_tasks() can be called from hardirq context through sysrq-n Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 6b02276baaa6..88a17c7128c3 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -7291,7 +7291,7 @@ void normalize_rt_tasks(void)
7291 unsigned long flags; 7291 unsigned long flags;
7292 struct rq *rq; 7292 struct rq *rq;
7293 7293
7294 read_lock_irq(&tasklist_lock); 7294 read_lock_irqsave(&tasklist_lock, flags);
7295 do_each_thread(g, p) { 7295 do_each_thread(g, p) {
7296 /* 7296 /*
7297 * Only normalize user tasks: 7297 * Only normalize user tasks:
@@ -7317,16 +7317,16 @@ void normalize_rt_tasks(void)
7317 continue; 7317 continue;
7318 } 7318 }
7319 7319
7320 spin_lock_irqsave(&p->pi_lock, flags); 7320 spin_lock(&p->pi_lock);
7321 rq = __task_rq_lock(p); 7321 rq = __task_rq_lock(p);
7322 7322
7323 normalize_task(rq, p); 7323 normalize_task(rq, p);
7324 7324
7325 __task_rq_unlock(rq); 7325 __task_rq_unlock(rq);
7326 spin_unlock_irqrestore(&p->pi_lock, flags); 7326 spin_unlock(&p->pi_lock);
7327 } while_each_thread(g, p); 7327 } while_each_thread(g, p);
7328 7328
7329 read_unlock_irq(&tasklist_lock); 7329 read_unlock_irqrestore(&tasklist_lock, flags);
7330} 7330}
7331 7331
7332#endif /* CONFIG_MAGIC_SYSRQ */ 7332#endif /* CONFIG_MAGIC_SYSRQ */