Commit 8823eae
workqueue: Show all busy workers in stall diagnostics
show_cpu_pool_hog() only prints workers whose task is currently running
on the CPU (task_is_running()). This misses workers that are busy
processing a work item but are sleeping or blocked — for example, a
worker that clears PF_WQ_WORKER and enters wait_event_idle(). Such a
worker still occupies a pool slot and prevents progress, yet produces
an empty backtrace section in the watchdog output.
This is happening on real arm64 systems, where
toggle_allocation_gate() IPIs every single CPU in the machine (which
lacks NMI), causing workqueue stalls that show empty backtraces because
toggle_allocation_gate() is sleeping in wait_event_idle().
Remove the task_is_running() filter so every in-flight worker in the
pool's busy_hash is dumped. The busy_hash is protected by pool->lock,
which is already held.
Signed-off-by: Breno Leitao <leitao@debian.org>
Acked-by: Song Liu <song@kernel.org>
Signed-off-by: Tejun Heo <tj@kernel.org>1 parent e8e14ac commit 8823eae
1 file changed
Lines changed: 13 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7583 | 7583 | | |
7584 | 7584 | | |
7585 | 7585 | | |
7586 | | - | |
7587 | | - | |
7588 | | - | |
| 7586 | + | |
| 7587 | + | |
| 7588 | + | |
7589 | 7589 | | |
7590 | 7590 | | |
7591 | 7591 | | |
| |||
7596 | 7596 | | |
7597 | 7597 | | |
7598 | 7598 | | |
7599 | | - | |
7600 | | - | |
7601 | | - | |
7602 | | - | |
7603 | | - | |
7604 | | - | |
7605 | | - | |
| 7599 | + | |
| 7600 | + | |
| 7601 | + | |
| 7602 | + | |
| 7603 | + | |
| 7604 | + | |
7606 | 7605 | | |
7607 | | - | |
7608 | | - | |
| 7606 | + | |
| 7607 | + | |
7609 | 7608 | | |
7610 | | - | |
7611 | | - | |
| 7609 | + | |
7612 | 7610 | | |
7613 | 7611 | | |
7614 | 7612 | | |
| |||
7619 | 7617 | | |
7620 | 7618 | | |
7621 | 7619 | | |
7622 | | - | |
| 7620 | + | |
7623 | 7621 | | |
7624 | 7622 | | |
7625 | 7623 | | |
| |||
0 commit comments