All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Florent Revest <revest@chromium.org>
Cc: linux-trace-kernel@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	Martin KaFai Lau <martin.lau@linux.dev>,
	bpf <bpf@vger.kernel.org>, Sven Schnelle <svens@linux.ibm.com>,
	Alexei Starovoitov <ast@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Alan Maguire <alan.maguire@oracle.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>, Guo Ren <guoren@kernel.org>
Subject: [PATCH v5 01/12] riscv: ftrace: Fix to pass correct ftrace_regs to ftrace_func_t functions
Date: Sun, 24 Sep 2023 22:35:59 +0900	[thread overview]
Message-ID: <169556255915.146934.16583650430641758878.stgit@devnote2> (raw)
In-Reply-To: <169556254640.146934.5654329452696494756.stgit@devnote2>

From: Masami Hiramatsu (Google) <mhiramat@kernel.org>

Since ftrace_func_t requires to pass 'struct ftrace_regs *' as the 4th
argument even if FTRACE_OPS_FL_SAVE_REGS is not set, ftrace_caller must
pass 'struct ftrace_regs *', which is a partial pt_regs, on the stack
to the ftrace_func_t functions, so that the ftrace_func_t functions can
access some partial registers.

Fix to allocate 'struct ftrace_regs' (which has the same size of 'struct
pt_regs') on the stack and save partial (argument) registers on it
instead of reduced size custom data structure.

Fixes: afc76b8b8011 ("riscv: Using PATCHABLE_FUNCTION_ENTRY instead of MCOUNT")
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
---
 arch/riscv/kernel/mcount-dyn.S |   65 +++++++++++++++++-----------------------
 1 file changed, 28 insertions(+), 37 deletions(-)

diff --git a/arch/riscv/kernel/mcount-dyn.S b/arch/riscv/kernel/mcount-dyn.S
index 669b8697aa38..84963680eff4 100644
--- a/arch/riscv/kernel/mcount-dyn.S
+++ b/arch/riscv/kernel/mcount-dyn.S
@@ -14,46 +14,37 @@
 	.text
 
 #define FENTRY_RA_OFFSET	8
-#define ABI_SIZE_ON_STACK	80
-#define ABI_A0			0
-#define ABI_A1			8
-#define ABI_A2			16
-#define ABI_A3			24
-#define ABI_A4			32
-#define ABI_A5			40
-#define ABI_A6			48
-#define ABI_A7			56
-#define ABI_T0			64
-#define ABI_RA			72
 
 	.macro SAVE_ABI
-	addi	sp, sp, -ABI_SIZE_ON_STACK
-
-	REG_S	a0, ABI_A0(sp)
-	REG_S	a1, ABI_A1(sp)
-	REG_S	a2, ABI_A2(sp)
-	REG_S	a3, ABI_A3(sp)
-	REG_S	a4, ABI_A4(sp)
-	REG_S	a5, ABI_A5(sp)
-	REG_S	a6, ABI_A6(sp)
-	REG_S	a7, ABI_A7(sp)
-	REG_S	t0, ABI_T0(sp)
-	REG_S	ra, ABI_RA(sp)
+	addi	sp, sp, -PT_SIZE_ON_STACK
+
+	/* Save t0 as epc for ftrace_regs_get_instruction_pointer() */
+	REG_S	t0, PT_EPC(sp)
+	REG_S	a0, PT_A0(sp)
+	REG_S	a1, PT_A1(sp)
+	REG_S	a2, PT_A2(sp)
+	REG_S	a3, PT_A3(sp)
+	REG_S	a4, PT_A4(sp)
+	REG_S	a5, PT_A5(sp)
+	REG_S	a6, PT_A6(sp)
+	REG_S	a7, PT_A7(sp)
+	REG_S	t0, PT_T0(sp)
+	REG_S	ra, PT_RA(sp)
 	.endm
 
 	.macro RESTORE_ABI
-	REG_L	a0, ABI_A0(sp)
-	REG_L	a1, ABI_A1(sp)
-	REG_L	a2, ABI_A2(sp)
-	REG_L	a3, ABI_A3(sp)
-	REG_L	a4, ABI_A4(sp)
-	REG_L	a5, ABI_A5(sp)
-	REG_L	a6, ABI_A6(sp)
-	REG_L	a7, ABI_A7(sp)
-	REG_L	t0, ABI_T0(sp)
-	REG_L	ra, ABI_RA(sp)
-
-	addi	sp, sp, ABI_SIZE_ON_STACK
+	REG_L	a0, PT_A0(sp)
+	REG_L	a1, PT_A1(sp)
+	REG_L	a2, PT_A2(sp)
+	REG_L	a3, PT_A3(sp)
+	REG_L	a4, PT_A4(sp)
+	REG_L	a5, PT_A5(sp)
+	REG_L	a6, PT_A6(sp)
+	REG_L	a7, PT_A7(sp)
+	REG_L	t0, PT_T0(sp)
+	REG_L	ra, PT_RA(sp)
+
+	addi	sp, sp, PT_SIZE_ON_STACK
 	.endm
 
 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
@@ -96,8 +87,8 @@ ftrace_call:
 	call	ftrace_stub
 
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-	addi	a0, sp, ABI_RA
-	REG_L	a1, ABI_T0(sp)
+	addi	a0, sp, PT_RA
+	REG_L	a1, PT_T0(sp)
 	addi	a1, a1, -FENTRY_RA_OFFSET
 #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
 	mv	a2, s0


  reply	other threads:[~2023-09-24 13:36 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-24 13:35 [PATCH v5 00/12] tracing: fprobe: rethook: Use ftrace_regs instead of pt_regs Masami Hiramatsu (Google)
2023-09-24 13:35 ` Masami Hiramatsu (Google) [this message]
2023-09-24 13:36 ` [PATCH v5 02/12] Documentation: probes: Add a new ret_ip callback parameter Masami Hiramatsu (Google)
2023-09-24 13:36 ` [PATCH v5 03/12] tracing: Add a comment about the requirements of the ftrace_regs Masami Hiramatsu (Google)
2023-09-24 13:36 ` [PATCH v5 04/12] fprobe: Use ftrace_regs in fprobe entry handler Masami Hiramatsu (Google)
2023-09-25 10:41   ` Jiri Olsa
2023-09-25 12:15     ` Masami Hiramatsu
2023-09-25 22:14       ` Jiri Olsa
2023-09-26  0:20         ` Masami Hiramatsu
2023-09-26  7:23           ` Jiri Olsa
2023-09-26 11:49             ` Jiri Olsa
2023-09-26 14:47               ` Masami Hiramatsu
2023-09-24 13:36 ` [PATCH v5 05/12] tracing: Expose ftrace_regs regardless of CONFIG_FUNCTION_TRACER Masami Hiramatsu (Google)
2023-09-24 13:37 ` [PATCH v5 06/12] fprobe: rethook: Use ftrace_regs in fprobe exit handler and rethook Masami Hiramatsu (Google)
2023-09-24 13:37 ` [PATCH v5 07/12] tracing: Add ftrace_partial_regs() for converting ftrace_regs to pt_regs Masami Hiramatsu (Google)
2023-09-24 13:37 ` [PATCH v5 08/12] tracing: Add ftrace_fill_perf_regs() for perf event Masami Hiramatsu (Google)
2023-09-24 13:37 ` [PATCH v5 09/12] tracing/fprobe: Enable fprobe events with CONFIG_DYNAMIC_FTRACE_WITH_ARGS Masami Hiramatsu (Google)
2023-09-24 13:37 ` [PATCH v5 10/12] bpf: Enable kprobe_multi feature if CONFIG_FPROBE is enabled Masami Hiramatsu (Google)
2023-09-24 13:38 ` [PATCH v5 11/12] Documentation: probes: Update fprobe document to use ftrace_regs Masami Hiramatsu (Google)
2023-09-24 13:38 ` [PATCH v5 12/12] Documentation: tracing: Add a note about argument and retval access Masami Hiramatsu (Google)
2023-09-29  1:21 ` [PATCH v5 00/12] tracing: fprobe: rethook: Use ftrace_regs instead of pt_regs Masami Hiramatsu
2023-09-30  0:12   ` Alexei Starovoitov
2023-09-30  9:14     ` Masami Hiramatsu
2023-10-02 15:39       ` Masami Hiramatsu

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=169556255915.146934.16583650430641758878.stgit@devnote2 \
    --to=mhiramat@kernel.org \
    --cc=acme@kernel.org \
    --cc=alan.maguire@oracle.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=guoren@kernel.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=martin.lau@linux.dev \
    --cc=peterz@infradead.org \
    --cc=revest@chromium.org \
    --cc=rostedt@goodmis.org \
    --cc=svens@linux.ibm.com \
    --cc=tglx@linutronix.de \
    /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.