From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Josh Poimboeuf <jpoimboe@redhat.com>, Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>, Petr Mladek <pmladek@suse.com>, Joe Lawrence <joe.lawrence@redhat.com>, Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@redhat.com>, "Naveen N . Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: Christophe Leroy <christophe.leroy@csgroup.eu>, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, live-patching@vger.kernel.org Subject: [PATCH v1 2/5] powerpc/ftrace: No need to read LR from stack in _mcount() Date: Thu, 28 Oct 2021 14:24:02 +0200 [thread overview] Message-ID: <24a3ba7db388537c44a038026f926d885372e6d3.1635423081.git.christophe.leroy@csgroup.eu> (raw) In-Reply-To: <cover.1635423081.git.christophe.leroy@csgroup.eu> All functions calling _mcount do it exactly the same way, with the following sequence of instructions: c07de788: 7c 08 02 a6 mflr r0 c07de78c: 90 01 00 04 stw r0,4(r1) c07de790: 4b 84 13 65 bl c001faf4 <_mcount> Allthough LR is pushed on stack, it is still in r0 while entering _mcount(). Function arguments are in r3-r10, so r11 and r12 are still available at that point. Do like PPC64 and use r12 to move LR into CTR, so that r0 is preserved and doesn't need to be restored from the stack. While at it, bring back the EXPORT_SYMBOL at the end of _mcount. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- arch/powerpc/kernel/trace/ftrace_32.S | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/kernel/trace/ftrace_32.S b/arch/powerpc/kernel/trace/ftrace_32.S index e023ae59c429..c7d57124cc59 100644 --- a/arch/powerpc/kernel/trace/ftrace_32.S +++ b/arch/powerpc/kernel/trace/ftrace_32.S @@ -14,16 +14,16 @@ _GLOBAL(mcount) _GLOBAL(_mcount) /* * It is required that _mcount on PPC32 must preserve the - * link register. But we have r0 to play with. We use r0 + * link register. But we have r12 to play with. We use r12 * to push the return address back to the caller of mcount * into the ctr register, restore the link register and * then jump back using the ctr register. */ - mflr r0 - mtctr r0 - lwz r0, 4(r1) + mflr r12 + mtctr r12 mtlr r0 bctr +EXPORT_SYMBOL(_mcount) _GLOBAL(ftrace_caller) MCOUNT_SAVE_FRAME @@ -43,7 +43,6 @@ _GLOBAL(ftrace_graph_stub) /* old link register ends up in ctr reg */ bctr -EXPORT_SYMBOL(_mcount) _GLOBAL(ftrace_stub) blr -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Josh Poimboeuf <jpoimboe@redhat.com>, Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>, Petr Mladek <pmladek@suse.com>, Joe Lawrence <joe.lawrence@redhat.com>, Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@redhat.com>, "Naveen N . Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: live-patching@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 2/5] powerpc/ftrace: No need to read LR from stack in _mcount() Date: Thu, 28 Oct 2021 14:24:02 +0200 [thread overview] Message-ID: <24a3ba7db388537c44a038026f926d885372e6d3.1635423081.git.christophe.leroy@csgroup.eu> (raw) In-Reply-To: <cover.1635423081.git.christophe.leroy@csgroup.eu> All functions calling _mcount do it exactly the same way, with the following sequence of instructions: c07de788: 7c 08 02 a6 mflr r0 c07de78c: 90 01 00 04 stw r0,4(r1) c07de790: 4b 84 13 65 bl c001faf4 <_mcount> Allthough LR is pushed on stack, it is still in r0 while entering _mcount(). Function arguments are in r3-r10, so r11 and r12 are still available at that point. Do like PPC64 and use r12 to move LR into CTR, so that r0 is preserved and doesn't need to be restored from the stack. While at it, bring back the EXPORT_SYMBOL at the end of _mcount. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- arch/powerpc/kernel/trace/ftrace_32.S | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/kernel/trace/ftrace_32.S b/arch/powerpc/kernel/trace/ftrace_32.S index e023ae59c429..c7d57124cc59 100644 --- a/arch/powerpc/kernel/trace/ftrace_32.S +++ b/arch/powerpc/kernel/trace/ftrace_32.S @@ -14,16 +14,16 @@ _GLOBAL(mcount) _GLOBAL(_mcount) /* * It is required that _mcount on PPC32 must preserve the - * link register. But we have r0 to play with. We use r0 + * link register. But we have r12 to play with. We use r12 * to push the return address back to the caller of mcount * into the ctr register, restore the link register and * then jump back using the ctr register. */ - mflr r0 - mtctr r0 - lwz r0, 4(r1) + mflr r12 + mtctr r12 mtlr r0 bctr +EXPORT_SYMBOL(_mcount) _GLOBAL(ftrace_caller) MCOUNT_SAVE_FRAME @@ -43,7 +43,6 @@ _GLOBAL(ftrace_graph_stub) /* old link register ends up in ctr reg */ bctr -EXPORT_SYMBOL(_mcount) _GLOBAL(ftrace_stub) blr -- 2.31.1
next prev parent reply other threads:[~2021-10-28 12:24 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-10-28 12:24 [PATCH v1 0/5] Implement livepatch on PPC32 Christophe Leroy 2021-10-28 12:24 ` Christophe Leroy 2021-10-28 12:24 ` [PATCH v1 1/5] livepatch: Fix build failure on 32 bits processors Christophe Leroy 2021-10-28 12:24 ` Christophe Leroy 2021-11-08 9:47 ` Petr Mladek 2021-11-08 9:47 ` Petr Mladek 2021-10-28 12:24 ` Christophe Leroy [this message] 2021-10-28 12:24 ` [PATCH v1 2/5] powerpc/ftrace: No need to read LR from stack in _mcount() Christophe Leroy 2021-10-28 12:24 ` [PATCH v1 3/5] powerpc/ftrace: Add module_trampoline_target() for PPC32 Christophe Leroy 2021-10-28 12:24 ` Christophe Leroy 2021-10-28 12:24 ` [PATCH v1 4/5] powerpc/ftrace: Activate HAVE_DYNAMIC_FTRACE_WITH_REGS on PPC32 Christophe Leroy 2021-10-28 12:24 ` Christophe Leroy 2021-10-28 12:24 ` [PATCH v1 5/5] powerpc/ftrace: Add support for livepatch to PPC32 Christophe Leroy 2021-10-28 12:24 ` Christophe Leroy 2021-11-08 10:01 ` Petr Mladek 2021-11-08 10:01 ` Petr Mladek 2021-10-28 13:35 ` [PATCH v1 0/5] Implement livepatch on PPC32 Steven Rostedt 2021-10-28 13:35 ` Steven Rostedt 2021-12-13 14:39 ` Christophe Leroy 2021-12-13 14:39 ` Christophe Leroy 2021-12-13 17:15 ` Steven Rostedt 2021-12-13 17:15 ` Steven Rostedt 2021-12-13 17:30 ` Christophe Leroy 2021-12-13 17:30 ` Christophe Leroy 2021-12-13 17:33 ` Steven Rostedt 2021-12-13 17:33 ` Steven Rostedt 2021-12-13 17:50 ` Christophe Leroy 2021-12-13 17:50 ` Christophe Leroy 2021-12-13 18:54 ` Steven Rostedt 2021-12-13 18:54 ` Steven Rostedt 2021-12-13 19:33 ` Christophe Leroy 2021-12-13 19:33 ` Christophe Leroy 2021-12-13 19:46 ` Steven Rostedt 2021-12-13 19:46 ` Steven Rostedt 2021-12-14 6:09 ` Christophe Leroy 2021-12-14 6:09 ` Christophe Leroy 2021-12-14 7:35 ` Christophe Leroy 2021-12-14 7:35 ` Christophe Leroy 2021-12-14 14:01 ` Steven Rostedt 2021-12-14 14:01 ` Steven Rostedt 2021-12-18 16:12 ` Christophe Leroy 2021-12-18 16:12 ` Christophe Leroy 2021-12-14 14:25 ` Heiko Carstens 2021-12-14 14:25 ` Heiko Carstens 2021-12-14 15:12 ` Christophe Leroy 2021-12-14 15:12 ` Christophe Leroy 2021-11-01 14:50 ` Miroslav Benes 2021-11-01 14:50 ` Miroslav Benes 2021-11-24 22:34 ` Michael Ellerman 2021-11-25 5:49 ` Christophe Leroy 2021-12-07 13:26 ` Michael Ellerman 2021-12-07 13:26 ` 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=24a3ba7db388537c44a038026f926d885372e6d3.1635423081.git.christophe.leroy@csgroup.eu \ --to=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=mingo@redhat.com \ --cc=naveen.n.rao@linux.vnet.ibm.com \ --cc=pmladek@suse.com \ --cc=rostedt@goodmis.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: linkBe 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.