sched/fair: remove printk while schedule is in progress
authorCaesar Wang <wxt@rock-chips.com>
Tue, 23 Aug 2016 10:47:02 +0000 (11:47 +0100)
committerTodd Kjos <tkjos@google.com>
Wed, 21 Sep 2016 17:22:39 +0000 (10:22 -0700)
commitdf232437710122fcb4e4a0484a1eded5aec29a6a
treedd5a4ad9d364daaf0c45f71a9572bee5f5219f0b
parent32cbbe59538d2dd0b77822cc27ce32ca487c467d
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>
kernel/sched/fair.c