diff options
author | Caesar Wang <wxt@rock-chips.com> | 2016-08-23 11:47:02 +0100 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2016-10-12 17:34:22 +0530 |
commit | ca4b83c5476f68cb0ead77c23775e7ef68a37058 (patch) | |
tree | 25acea169ba7c2b72a62118db95b50f83e61d1d6 /kernel/sched/features.h | |
parent | 31f42471b16e432323c92d038836039b088730c3 (diff) |
sched/fair: remove printk while schedule is in progress
It will cause deadlock and while(1) if call printk while schedule is in
progress. The block state like as below:
cpu0(hold the console sem):
printk->console_unlock->up_sem->spin_lock(&sem->lock)->wake_up_process(cpu1)
->try_to_wake_up(cpu1)->while(p->on_cpu).
cpu1(request console sem):
console_lock->down_sem->schedule->idle_banlance->update_cpu_capacity->
printk->console_trylock->spin_lock(&sem->lock).
p->on_cpu will be 1 forever, because the task is still running on cpu1,
so cpu0 is blocked in while(p->on_cpu), but cpu1 could not get
spin_lock(&sem->lock), it is blocked too, it means the task will running
on cpu1 forever.
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Diffstat (limited to 'kernel/sched/features.h')
0 files changed, 0 insertions, 0 deletions