aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mpi/mpi-scan.c
diff options
context:
space:
mode:
authorDapeng Mi <[email protected]>2025-10-15 05:18:28 +0000
committerIngo Molnar <[email protected]>2025-11-03 10:04:19 +0000
commiteb3182ef0405ff2f6668fd3e5ff9883f60ce8801 (patch)
treefb6cc6a2fe34709757e367e8d4e60e237f8fbe63 /lib/mpi/mpi-scan.c
parentLinux 6.18-rc4 (diff)
downloadkernel-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