mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 06:25:52 +02:00
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. Change-Id: I60d02d8c957273872f97939632bdd235accdad4e Signed-off-by: Chen Liang <cl@rock-chips.com> |
||
|---|---|---|
| .. | ||
| autogroup.c | ||
| autogroup.h | ||
| clock.c | ||
| completion.c | ||
| core.c | ||
| cpuacct.c | ||
| cpudeadline.c | ||
| cpudeadline.h | ||
| cpufreq_schedutil.c | ||
| cpufreq.c | ||
| cpupri.c | ||
| cpupri.h | ||
| cputime.c | ||
| deadline.c | ||
| debug.c | ||
| fair.c | ||
| features.h | ||
| idle.c | ||
| isolation.c | ||
| loadavg.c | ||
| Makefile | ||
| membarrier.c | ||
| pelt.c | ||
| pelt.h | ||
| rt.c | ||
| sched-pelt.h | ||
| sched.h | ||
| stats.c | ||
| stats.h | ||
| stop_task.c | ||
| swait.c | ||
| topology.c | ||
| tune.c | ||
| tune.h | ||
| wait_bit.c | ||
| wait.c | ||