From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [for-next][PATCH 8/9] ftrace/x86: Get rid of ftrace_caller_setup
Date: Mon, 01 Dec 2014 14:22:33 -0500 [thread overview]
Message-ID: <20141201192307.829949879@goodmis.org> (raw)
In-Reply-To: 20141201192225.548178029@goodmis.org
[-- Attachment #1: 0008-ftrace-x86-Get-rid-of-ftrace_caller_setup.patch --]
[-- Type: text/plain, Size: 4300 bytes --]
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
Move all the work from ftrace_caller_setup into save_mcount_regs. This
simplifies the code and makes it easier to understand.
Link: http://lkml.kernel.org/r/CA+55aFxUTUbdxpjVMW8X9c=o8sui7OB_MYPfcbJuDyfUWtNrNg@mail.gmail.com
Link: http://lkml.kernel.org/r/alpine.DEB.2.11.1411262304010.3961@nanos
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
arch/x86/kernel/mcount_64.S | 71 +++++++++++++++++++++++++++------------------
1 file changed, 42 insertions(+), 29 deletions(-)
diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S
index 003b22df1d87..ddc766efa1f1 100644
--- a/arch/x86/kernel/mcount_64.S
+++ b/arch/x86/kernel/mcount_64.S
@@ -54,7 +54,15 @@
* be saved in the locations that pt_regs has them in.
*/
-/* @added: the amount of stack added before calling this */
+/*
+ * @added: the amount of stack added before calling this
+ *
+ * After this is called, the following registers contain:
+ *
+ * %rdi - holds the address that called the trampoline
+ * %rsi - holds the parent function (traced function's return address)
+ * %rdx - holds the original %rbp
+ */
.macro save_mcount_regs added=0
/* Always save the original rbp */
@@ -101,9 +109,24 @@
movq MCOUNT_REG_SIZE-8(%rsp), %rdx
movq %rdx, RBP(%rsp)
+ /* Copy the parent address into %rsi (second parameter) */
+#ifdef CC_USING_FENTRY
+ movq MCOUNT_REG_SIZE+8+\added(%rsp), %rsi
+#else
+ /* %rdx contains original %rbp */
+ movq 8(%rdx), %rsi
+#endif
+
/* Move RIP to its proper location */
movq MCOUNT_REG_SIZE+\added(%rsp), %rdi
movq %rdi, RIP(%rsp)
+
+ /*
+ * Now %rdi (the first parameter) has the return address of
+ * where ftrace_call returns. But the callbacks expect the
+ * the address of the call itself.
+ */
+ subq $MCOUNT_INSN_SIZE, %rdi
.endm
.macro restore_mcount_regs
@@ -122,28 +145,6 @@
.endm
-/* skip is set if stack has been adjusted */
-.macro ftrace_caller_setup trace_label added=0
- save_mcount_regs \added
-
- /* Save this location */
-GLOBAL(\trace_label)
- /* Load the ftrace_ops into the 3rd parameter */
- movq function_trace_op(%rip), %rdx
-
- /* %rdi already has %rip from the save_mcount_regs macro */
- subq $MCOUNT_INSN_SIZE, %rdi
- /* Load the parent_ip into the second parameter */
-#ifdef CC_USING_FENTRY
- movq MCOUNT_REG_SIZE+8+\added(%rsp), %rsi
-#else
- /* Need to grab the original %rbp */
- movq RBP(%rsp), %rsi
- /* Now parent address is 8 above original %rbp */
- movq 8(%rsi), %rsi
-#endif
-.endm
-
#ifdef CONFIG_DYNAMIC_FTRACE
ENTRY(function_hook)
@@ -151,7 +152,13 @@ ENTRY(function_hook)
END(function_hook)
ENTRY(ftrace_caller)
- ftrace_caller_setup ftrace_caller_op_ptr
+ /* save_mcount_regs fills in first two parameters */
+ save_mcount_regs
+
+GLOBAL(ftrace_caller_op_ptr)
+ /* Load the ftrace_ops into the 3rd parameter */
+ movq function_trace_op(%rip), %rdx
+
/* regs go into 4th parameter (but make it NULL) */
movq $0, %rcx
@@ -182,7 +189,12 @@ ENTRY(ftrace_regs_caller)
pushfq
/* added 8 bytes to save flags */
- ftrace_caller_setup ftrace_regs_caller_op_ptr 8
+ save_mcount_regs 8
+ /* save_mcount_regs fills in first two parameters */
+
+GLOBAL(ftrace_regs_caller_op_ptr)
+ /* Load the ftrace_ops into the 3rd parameter */
+ movq function_trace_op(%rip), %rdx
/* Save the rest of pt_regs */
movq %r15, R15(%rsp)
@@ -263,7 +275,8 @@ GLOBAL(ftrace_stub)
retq
trace:
- ftrace_caller_setup ftrace_caller_op_ptr
+ /* save_mcount_regs fills in first two parameters */
+ save_mcount_regs
call *ftrace_trace_function
@@ -276,16 +289,16 @@ END(function_hook)
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
ENTRY(ftrace_graph_caller)
+ /* Saves rbp into %rdx */
save_mcount_regs
#ifdef CC_USING_FENTRY
leaq MCOUNT_REG_SIZE+8(%rsp), %rdi
movq $0, %rdx /* No framepointers needed */
#else
- /* Need to grab the original %rbp */
- movq RBP(%rsp), %rdx
- /* Now parent address is 8 above original %rbp */
+ /* Save address of the return address of traced function */
leaq 8(%rdx), %rdi
+ /* ftrace does sanity checks against frame pointers */
movq (%rdx), %rdx
#endif
movq RIP(%rsp), %rsi
--
2.1.3
next prev parent reply other threads:[~2014-12-01 19:23 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-01 19:22 [for-next][PATCH 0/9] ftrace/x86: Updated mcount cleanup for 3.19 Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 1/9] ftrace/x86: Have static tracing also use ftrace_caller_setup Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 2/9] ftrace/x86: Move MCOUNT_SAVE_FRAME out of header file Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 3/9] ftrace/x86: Rename MCOUNT_SAVE_FRAME and add more detailed comments Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 4/9] ftrace/x86: Have save_mcount_regs store RIP in %rdi for first parameter Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 5/9] ftrace/x86: Simplify save_mcount_regs on getting RIP Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 6/9] ftrace/x86: Add macro MCOUNT_REG_SIZE for amount of stack used to save mcount regs Steven Rostedt
2014-12-01 19:22 ` [for-next][PATCH 7/9] ftrace/x86: Have save_mcount_regs macro also save stack frames if needed Steven Rostedt
2014-12-01 19:22 ` Steven Rostedt [this message]
2014-12-01 19:22 ` [for-next][PATCH 9/9] ftrace/fgraph/x86: Have prepare_ftrace_return() take ip as first parameter Steven Rostedt
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=20141201192307.829949879@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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.