diff options
| author | Breno Leitao <leitao@debian.org> | 2026-06-30 09:15:20 -0700 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2026-06-30 06:36:40 -1000 |
| commit | 7ddfa24d3f12ab9f3ac0e0b4e8e573ff45574d86 (patch) | |
| tree | cb617956ddbd875e113aff7b833f5c13290fc499 /tools/perf/scripts/python/bin/export-to-sqlite-record | |
| parent | f504706a25eb3462cc00c76340feb6751f9e37f9 (diff) | |
workqueue: only show running workers in stall diagnostics
show_cpu_pool_busy_workers() dumps every in-flight worker in the pool's
busy_hash, including workers that are not currently running on the CPU.
Restore the task_is_running() filter so only running workers are dumped.
When no running worker is found the pool may be stuck, unable to wake an
idle worker to process pending work, and the watchdog would otherwise
give no feedback. Add show_pool_no_running_worker() to report the pool
id, CPU, idle state, and worker counts in that case.
The pool info message is printed inside pool->lock using
printk_deferred_enter/exit, the same pattern used by the existing
busy-worker loop, to avoid deadlocks with console drivers that queue
work while holding locks also taken in their write paths.
This has been running on the Meta fleet for a while and caught some real
issues, for instance EFI stalls stalling the workqueue [1].
Link: https://lore.kernel.org/all/20260616-efi_timeout-v3-0-76dd1d26657b@debian.org/ [1]
Suggested-by: Petr Mladek <pmladek@suse.com>
Fixes: 8823eaef45da7 ("workqueue: Show all busy workers in stall diagnostics")
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/bin/export-to-sqlite-record')
0 files changed, 0 insertions, 0 deletions
