diff options
| author | Dapeng Mi <[email protected]> | 2025-10-15 05:18:28 +0000 |
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2025-11-03 10:04:19 +0000 |
| commit | eb3182ef0405ff2f6668fd3e5ff9883f60ce8801 (patch) | |
| tree | fb6cc6a2fe34709757e367e8d4e60e237f8fbe63 /lib/mpi/mpi-scan.c | |
| parent | Linux 6.18-rc4 (diff) | |
| download | kernel-eb3182ef0405ff2f6668fd3e5ff9883f60ce8801.tar.gz kernel-eb3182ef0405ff2f6668fd3e5ff9883f60ce8801.zip | |
perf/core: Fix system hang caused by cpu-clock usage
cpu-clock usage by the async-profiler tool can trigger a system hang,
which got bisected back to the following commit by Octavia Togami:
18dbcbfabfff ("perf: Fix the POLL_HUP delivery breakage") causes this issue
The root cause of the hang is that cpu-clock is a special type of SW
event which relies on hrtimers. The __perf_event_overflow() callback
is invoked from the hrtimer handler for cpu-clock events, and
__perf_event_overflow() tries to call cpu_clock_event_stop()
to stop the event, which calls htimer_cancel() to cancel the hrtimer.
But that's a recursion into the hrtimer code from a hrtimer handler,
which (unsurprisingly) deadlocks.
To fix this bug, use hrtimer_try_to_cancel() instead, and set
the PERF_HES_STOPPED flag, which causes perf_swevent_hrtimer()
to stop the event once it sees the PERF_HES_STOPPED flag.
[ mingo: Fixed the comments and improved the changelog. ]
Closes: https://lore.kernel.org/all/CAHPNGSQpXEopYreir+uDDEbtXTBvBvi8c6fYXJvceqtgTPao3Q@mail.gmail.com/
Fixes: 18dbcbfabfff ("perf: Fix the POLL_HUP delivery breakage")
Reported-by: Octavia Togami <[email protected]>
Suggested-by: Peter Zijlstra <[email protected]>
Signed-off-by: Dapeng Mi <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Tested-by: Octavia Togami <[email protected]>
Cc: [email protected]
Link: https://github.com/lucko/spark/issues/530
Link: https://patch.msgid.link/[email protected]
Diffstat (limited to 'lib/mpi/mpi-scan.c')
0 files changed, 0 insertions, 0 deletions
