All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>,
	Jiri Kosina <jikos@kernel.org>,
	Joe Lawrence <joe.lawrence@redhat.com>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Miroslav Benes <mbenes@suse.cz>, Ingo Molnar <mingo@redhat.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Petr Mladek <pmladek@suse.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	"live-patching@vger.kernel.org" <live-patching@vger.kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>
Subject: Re: [PATCH v2 09/13] powerpc/ftrace: Implement CONFIG_DYNAMIC_FTRACE_WITH_ARGS
Date: Tue, 15 Feb 2022 09:38:49 -0500	[thread overview]
Message-ID: <20220215093849.556d5444@gandalf.local.home> (raw)
In-Reply-To: <1644930705.g64na2kgvd.naveen@linux.ibm.com>

On Tue, 15 Feb 2022 19:06:48 +0530
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:

> As I understand it, the reason ftrace_get_regs() was introduced was to 
> be able to only return the pt_regs, if _all_ registers were saved into 
> it, which we don't do when coming in through ftrace_caller(). See the 
> x86 implementation (commit 02a474ca266a47 ("ftrace/x86: Allow for 
> arguments to be passed in to ftrace_regs by default"), which returns 
> pt_regs conditionally.

I can give you the history of ftrace_caller and ftrace_regs_caller.

ftrace_caller saved just enough as was denoted for gcc mcount trampolines.
The new fentry which happens at the start of the function, whereas mcount
happens after the stack frame is set up, may change the rules on some
architectures.

As for ftrace_regs_caller, that was created for kprobes. As the majority of
kprobes were added at the start of the function, it made sense to hook into
ftrace as the ftrace trampoline call is much faster than taking a
breakpoint interrupt. But to keep compatibility with breakpoint
interrupts, we needed to fill in all the registers, and make it act just
like a breakpoint interrupt.

I've been wanting to record function parameters, and because the ftrace
trampoline must at a minimum save the function parameters before calling
the ftrace callbacks, all the information for those parameters were being
saved but were never exposed to the ftrace callbacks. I created the the
DYNAMIC_FTRACE_WITH_ARGS to expose them. I first just used pt_regs with
just the parameters filled in, but that was criticized as it could be
confusing where the non filled in pt_regs might be used and thinking they
are legitimate. So I created ftrace_regs that would give you just the
function arguments (if DYNAMIC_FTRACE_WITH_ARGS is defined), or it will
give you a full pt_regs, if the caller came from the ftrace_regs_caller. If
not, it will give you a NULL pointer.

The first user to use the args was live kernel patching, as they only need
that and the return pointer.

-- Steve

WARNING: multiple messages have this Message-ID (diff)
From: Steven Rostedt <rostedt@goodmis.org>
To: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Cc: Petr Mladek <pmladek@suse.com>,
	Joe Lawrence <joe.lawrence@redhat.com>,
	Jiri Kosina <jikos@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@redhat.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	"live-patching@vger.kernel.org" <live-patching@vger.kernel.org>,
	Miroslav Benes <mbenes@suse.cz>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v2 09/13] powerpc/ftrace: Implement CONFIG_DYNAMIC_FTRACE_WITH_ARGS
Date: Tue, 15 Feb 2022 09:38:49 -0500	[thread overview]
Message-ID: <20220215093849.556d5444@gandalf.local.home> (raw)
In-Reply-To: <1644930705.g64na2kgvd.naveen@linux.ibm.com>

On Tue, 15 Feb 2022 19:06:48 +0530
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:

> As I understand it, the reason ftrace_get_regs() was introduced was to 
> be able to only return the pt_regs, if _all_ registers were saved into 
> it, which we don't do when coming in through ftrace_caller(). See the 
> x86 implementation (commit 02a474ca266a47 ("ftrace/x86: Allow for 
> arguments to be passed in to ftrace_regs by default"), which returns 
> pt_regs conditionally.

I can give you the history of ftrace_caller and ftrace_regs_caller.

ftrace_caller saved just enough as was denoted for gcc mcount trampolines.
The new fentry which happens at the start of the function, whereas mcount
happens after the stack frame is set up, may change the rules on some
architectures.

As for ftrace_regs_caller, that was created for kprobes. As the majority of
kprobes were added at the start of the function, it made sense to hook into
ftrace as the ftrace trampoline call is much faster than taking a
breakpoint interrupt. But to keep compatibility with breakpoint
interrupts, we needed to fill in all the registers, and make it act just
like a breakpoint interrupt.

I've been wanting to record function parameters, and because the ftrace
trampoline must at a minimum save the function parameters before calling
the ftrace callbacks, all the information for those parameters were being
saved but were never exposed to the ftrace callbacks. I created the the
DYNAMIC_FTRACE_WITH_ARGS to expose them. I first just used pt_regs with
just the parameters filled in, but that was criticized as it could be
confusing where the non filled in pt_regs might be used and thinking they
are legitimate. So I created ftrace_regs that would give you just the
function arguments (if DYNAMIC_FTRACE_WITH_ARGS is defined), or it will
give you a full pt_regs, if the caller came from the ftrace_regs_caller. If
not, it will give you a NULL pointer.

The first user to use the args was live kernel patching, as they only need
that and the return pointer.

-- Steve

  parent reply	other threads:[~2022-02-15 14:38 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-20 16:37 [PATCH v2 00/13] Implement livepatch on PPC32 and more Christophe Leroy
2021-12-20 16:37 ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 01/13] livepatch: Fix build failure on 32 bits processors Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-22 13:47   ` Miroslav Benes
2021-12-22 13:47     ` Miroslav Benes
2022-01-04 19:35   ` Joe Lawrence
2022-01-04 19:35     ` Joe Lawrence
2021-12-20 16:38 ` [PATCH v2 02/13] tracing: Fix selftest config check for function graph start up test Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-02-24 13:43   ` Christophe Leroy
2022-02-24 13:43     ` Christophe Leroy
2022-02-24 14:53     ` Steven Rostedt
2022-02-24 14:53       ` Steven Rostedt
2022-02-24 15:13       ` Christophe Leroy
2022-02-24 15:13         ` Christophe Leroy
2022-02-24 15:17         ` Steven Rostedt
2022-02-24 15:17           ` Steven Rostedt
2022-02-25  2:42       ` Michael Ellerman
2022-02-25  2:42         ` Michael Ellerman
2021-12-20 16:38 ` [PATCH v2 03/13] powerpc/module_32: Fix livepatching for RO modules Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-01-04 19:44   ` Joe Lawrence
2022-01-04 19:44     ` Joe Lawrence
2021-12-20 16:38 ` [PATCH v2 04/13] powerpc/ftrace: Add support for livepatch to PPC32 Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-22 14:00   ` Miroslav Benes
2021-12-22 14:00     ` Miroslav Benes
2021-12-20 16:38 ` [PATCH v2 05/13] powerpc/ftrace: Don't save again LR in ftrace_regs_caller() on PPC32 Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 06/13] powerpc/ftrace: Simplify PPC32's return_to_handler() Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 07/13] powerpc/ftrace: Prepare PPC32's ftrace_caller() for CONFIG_DYNAMIC_FTRACE_WITH_ARGS Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 08/13] powerpc/ftrace: Prepare PPC64's " Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-02-14 15:19   ` Naveen N. Rao
2022-02-14 15:19     ` Naveen N. Rao
2021-12-20 16:38 ` [PATCH v2 09/13] powerpc/ftrace: Implement CONFIG_DYNAMIC_FTRACE_WITH_ARGS Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-22 14:19   ` Miroslav Benes
2021-12-22 14:19     ` Miroslav Benes
2021-12-22 14:19     ` Miroslav Benes
2022-02-14 15:25   ` Naveen N. Rao
2022-02-14 15:25     ` Naveen N. Rao
2022-02-15  8:00     ` Christophe Leroy
2022-02-15  8:00       ` Christophe Leroy
2022-02-15 11:05       ` Michael Ellerman
2022-02-15 11:05         ` Michael Ellerman
2022-02-15 13:36         ` Naveen N. Rao
2022-02-15 13:36           ` Naveen N. Rao
2022-02-15 14:28           ` Christophe Leroy
2022-02-15 14:28             ` Christophe Leroy
2022-02-15 14:51             ` Christophe Leroy
2022-02-15 14:51               ` Christophe Leroy
2022-02-15 16:25               ` Naveen N. Rao
2022-02-15 16:25                 ` Naveen N. Rao
2022-02-16 13:04                 ` Heiko Carstens
2022-02-16 13:04                   ` Heiko Carstens
2022-02-16 13:27                   ` Sven Schnelle
2022-02-16 13:27                     ` Sven Schnelle
2022-02-15 14:38           ` Steven Rostedt [this message]
2022-02-15 14:38             ` Steven Rostedt
2022-02-15 16:26             ` Naveen N. Rao
2022-02-15 16:26               ` Naveen N. Rao
2021-12-20 16:38 ` [PATCH v2 10/13] powerpc/ftrace: Refactor ftrace_{en/dis}able_ftrace_graph_caller Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 11/13] powerpc/ftrace: directly call of function graph tracer by ftrace caller Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-02-14 17:24   ` Naveen N. Rao
2022-02-14 17:24     ` Naveen N. Rao
2022-02-14 19:03     ` Steven Rostedt
2022-02-14 19:03       ` Steven Rostedt
2021-12-20 16:38 ` [PATCH v2 12/13] powerpc/ftrace: Prepare ftrace_64_mprofile.S for reuse by PPC32 Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-02-14 17:51   ` Naveen N. Rao
2022-02-14 17:51     ` Naveen N. Rao
2022-02-15  8:33     ` Christophe Leroy
2022-02-15  8:33       ` Christophe Leroy
2021-12-20 16:38 ` [PATCH v2 13/13] powerpc/ftrace: Remove ftrace_32.S Christophe Leroy
2021-12-20 16:38   ` Christophe Leroy
2022-02-11  7:41   ` [PATCH] Fixup for next-test 3a1a8f078670 ("powerpc/ftrace: Remove ftrace_32.S") Christophe Leroy
2022-02-11  7:41     ` Christophe Leroy
2022-02-16 12:26 ` [PATCH v2 00/13] Implement livepatch on PPC32 and more Michael Ellerman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220215093849.556d5444@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=christophe.leroy@csgroup.eu \
    --cc=jikos@kernel.org \
    --cc=joe.lawrence@redhat.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=pmladek@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.