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:
Родитель
8ed3699682
Коммит
4cf5d77a6e
|
@ -7291,7 +7291,7 @@ void normalize_rt_tasks(void)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct rq *rq;
|
struct rq *rq;
|
||||||
|
|
||||||
read_lock_irq(&tasklist_lock);
|
read_lock_irqsave(&tasklist_lock, flags);
|
||||||
do_each_thread(g, p) {
|
do_each_thread(g, p) {
|
||||||
/*
|
/*
|
||||||
* Only normalize user tasks:
|
* Only normalize user tasks:
|
||||||
|
@ -7317,16 +7317,16 @@ void normalize_rt_tasks(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&p->pi_lock, flags);
|
spin_lock(&p->pi_lock);
|
||||||
rq = __task_rq_lock(p);
|
rq = __task_rq_lock(p);
|
||||||
|
|
||||||
normalize_task(rq, p);
|
normalize_task(rq, p);
|
||||||
|
|
||||||
__task_rq_unlock(rq);
|
__task_rq_unlock(rq);
|
||||||
spin_unlock_irqrestore(&p->pi_lock, flags);
|
spin_unlock(&p->pi_lock);
|
||||||
} while_each_thread(g, p);
|
} while_each_thread(g, p);
|
||||||
|
|
||||||
read_unlock_irq(&tasklist_lock);
|
read_unlock_irqrestore(&tasklist_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_MAGIC_SYSRQ */
|
#endif /* CONFIG_MAGIC_SYSRQ */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче