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>
This commit is contained in:
parent
8ed3699682
commit
4cf5d77a6e
1 changed files with 4 additions and 4 deletions
|
@ -7291,7 +7291,7 @@ void normalize_rt_tasks(void)
|
|||
unsigned long flags;
|
||||
struct rq *rq;
|
||||
|
||||
read_lock_irq(&tasklist_lock);
|
||||
read_lock_irqsave(&tasklist_lock, flags);
|
||||
do_each_thread(g, p) {
|
||||
/*
|
||||
* Only normalize user tasks:
|
||||
|
@ -7317,16 +7317,16 @@ void normalize_rt_tasks(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&p->pi_lock, flags);
|
||||
spin_lock(&p->pi_lock);
|
||||
rq = __task_rq_lock(p);
|
||||
|
||||
normalize_task(rq, p);
|
||||
|
||||
__task_rq_unlock(rq);
|
||||
spin_unlock_irqrestore(&p->pi_lock, flags);
|
||||
spin_unlock(&p->pi_lock);
|
||||
} while_each_thread(g, p);
|
||||
|
||||
read_unlock_irq(&tasklist_lock);
|
||||
read_unlock_irqrestore(&tasklist_lock, flags);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MAGIC_SYSRQ */
|
||||
|
|
Loading…
Reference in a new issue