[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250731103211.10b42cb5@gandalf.local.home>
Date: Thu, 31 Jul 2025 10:32:11 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: LKML <linux-kernel@...r.kernel.org>, Masami Hiramatsu
<mhiramat@...nel.org>, Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Josh Poimboeuf <jpoimboe@...nel.org>, Peter Zijlstra
<peterz@...radead.org>, Ingo Molnar <mingo@...nel.org>, Jiri Olsa
<jolsa@...nel.org>, Arnaldo Carvalho de Melo <acme@...nel.org>, Namhyung
Kim <namhyung@...nel.org>, Thomas Gleixner <tglx@...utronix.de>, Andrii
Nakryiko <andrii@...nel.org>, Indu Bhagat <indu.bhagat@...cle.com>, "Jose
E. Marchesi" <jemarch@....org>, Beau Belgrave <beaub@...ux.microsoft.com>,
Jens Remus <jremus@...ux.ibm.com>, Andrew Morton
<akpm@...ux-foundation.org>
Subject: [GIT PULL] unwind_deferred: Inclusion for v6.17
Linus,
Deferred unwind changes for 6.17
This is the core infrastructure for the deferred unwinder that is required
for sframes[1]. Several other patch series is based on this work although
those patch series are not dependent on each other. In order to simplify the
development, having this core series upstream will allow the other series to
be worked on in parallel. The other series are:
- The two patches to implement x86:
https://lore.kernel.org/linux-trace-kernel/20250717004958.260781923@kernel.org/
https://lore.kernel.org/linux-trace-kernel/20250717004958.432327787@kernel.org/
- The s390 work:
https://lore.kernel.org/linux-trace-kernel/20250710163522.3195293-1-jremus@linux.ibm.com/
- The perf work:
https://lore.kernel.org/linux-trace-kernel/20250718164119.089692174@kernel.org/
- The ftrace work:
https://lore.kernel.org/linux-trace-kernel/20250424192612.505622711@goodmis.org/
- The sframe work:
https://lore.kernel.org/linux-trace-kernel/20250717012848.927473176@kernel.org/
And more is on the way.
The core infrastructure adds the following in kernel APIs:
- int unwind_user_faultable(struct unwind_stacktrace *trace);
Performs a user space stack trace that may fault user pages in.
- int unwind_deferred_init(struct unwind_work *work, unwind_callback_t func);
Allows a tracer to register with the unwind deferred infrastructure.
- int unwind_deferred_request(struct unwind_work *work, u64 *cookie);
Used when a tracer request a deferred trace. Can be called from interrupt
or NMI context.
- void unwind_deferred_cancel(struct unwind_work *work);
Called by a tracer to unregister from the deferred unwind infrastructure.
- void unwind_deferred_task_exit(struct task_struct *task);
Called by task exit code to flush any pending unwind requests.
- void unwind_task_init(struct task_struct *task);
Called by do_fork() to initialize the task struct for the deferred
unwinder.
- void unwind_task_free(struct task_struct *task);
Called by do_exit() to free up any resources used by the deferred
unwinder.
None of the above is actually compiled unless an architecture enables it,
which none currently do.
[1] https://sourceware.org/binutils/wiki/sframe
Please pull the latest trace-deferred-unwind-v6.17 tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace-deferred-unwind-v6.17
Tag SHA1: 174c4bf22a4c37e5cf4fedb540bfd7c09f472640
Head SHA1: b3b9cb11aa034cfa9eb880bb9bb3d5aaf732e479
Josh Poimboeuf (3):
unwind_user: Add user space unwinding API with frame pointer support
unwind_user/deferred: Add unwind cache
unwind_user/deferred: Add deferred unwinding interface
Steven Rostedt (7):
unwind_user/deferred: Add unwind_user_faultable()
unwind_user/deferred: Make unwind deferral requests NMI-safe
unwind deferred: Use bitmask to determine which callbacks to call
unwind deferred: Add unwind_completed mask to stop spurious callbacks
unwind: Add USED bit to only have one conditional on way back to user space
unwind deferred: Use SRCU unwind_deferred_task_work()
unwind: Finish up unwind when a task exits
----
MAINTAINERS | 8 +
arch/Kconfig | 7 +
include/asm-generic/Kbuild | 1 +
include/asm-generic/unwind_user.h | 5 +
include/linux/entry-common.h | 2 +
include/linux/sched.h | 5 +
include/linux/unwind_deferred.h | 81 ++++++++
include/linux/unwind_deferred_types.h | 39 ++++
include/linux/unwind_user.h | 14 ++
include/linux/unwind_user_types.h | 44 +++++
kernel/Makefile | 1 +
kernel/exit.c | 2 +
kernel/fork.c | 4 +
kernel/unwind/Makefile | 1 +
kernel/unwind/deferred.c | 362 ++++++++++++++++++++++++++++++++++
kernel/unwind/user.c | 128 ++++++++++++
16 files changed, 704 insertions(+)
create mode 100644 include/asm-generic/unwind_user.h
create mode 100644 include/linux/unwind_deferred.h
create mode 100644 include/linux/unwind_deferred_types.h
create mode 100644 include/linux/unwind_user.h
create mode 100644 include/linux/unwind_user_types.h
create mode 100644 kernel/unwind/Makefile
create mode 100644 kernel/unwind/deferred.c
create mode 100644 kernel/unwind/user.c
---------------------------
Powered by blists - more mailing lists