This is based on top of the deferred unwind core patch series: https://lore.kernel.org/linux-trace-kernel/20250701005321.942306...@goodmis.org/ git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git unwind/core
This series implements the perf interface to use deferred user space stack tracing. The code can be found here: git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git unwind/perf Head SHA1: e00f51618c68b5b6fd6054488212504592c9e392 Changes since v11: https://lore.kernel.org/linux-trace-kernel/20250625231541.584226...@goodmis.org/ - Also check against PF_USER_WORKER as io workers do not have PF_KTHREAD set. - Removed deferred_request_nmi() and have NMIs just use the normal deferred_request() function. As Peter Zijlstra has stated, in_nmi() can nest because some exceptions set in_nmi() and a real NMI could come in. Josh Poimboeuf (5): perf: Remove get_perf_callchain() init_nr argument perf: Have get_perf_callchain() return NULL if crosstask and user are set perf: Simplify get_perf_callchain() user logic perf: Skip user unwind if the task is a kernel thread perf: Support deferred user callchains Namhyung Kim (4): perf tools: Minimal CALLCHAIN_DEFERRED support perf record: Enable defer_callchain for user callchains perf script: Display PERF_RECORD_CALLCHAIN_DEFERRED perf tools: Merge deferred user callchains Steven Rostedt (2): perf: Use current->flags & PF_KTHREAD|PF_USER_WORKER instead of current->mm == NULL perf: Support deferred user callchains for per CPU events ---- include/linux/perf_event.h | 13 +- include/uapi/linux/perf_event.h | 19 +- kernel/bpf/stackmap.c | 8 +- kernel/events/callchain.c | 49 ++-- kernel/events/core.c | 410 +++++++++++++++++++++++++++++- tools/include/uapi/linux/perf_event.h | 19 +- tools/lib/perf/include/perf/event.h | 7 + tools/perf/Documentation/perf-script.txt | 5 + tools/perf/builtin-script.c | 92 +++++++ tools/perf/util/callchain.c | 24 ++ tools/perf/util/callchain.h | 3 + tools/perf/util/event.c | 1 + tools/perf/util/evlist.c | 1 + tools/perf/util/evlist.h | 1 + tools/perf/util/evsel.c | 39 +++ tools/perf/util/evsel.h | 1 + tools/perf/util/machine.c | 1 + tools/perf/util/perf_event_attr_fprintf.c | 1 + tools/perf/util/sample.h | 3 +- tools/perf/util/session.c | 78 ++++++ tools/perf/util/tool.c | 2 + tools/perf/util/tool.h | 4 +- 22 files changed, 745 insertions(+), 36 deletions(-)