Le 19/06/2023 à 11:47, Naveen N Rao a écrit : > ftrace_low.S has just the _mcount stub and return_to_handler(). Merge > this back into ftrace_mprofile.S and ftrace_64_pg.S to keep all ftrace > code together, and to allow those to evolve independently. > > ftrace_mprofile.S is also not an entirely accurate name since this also > holds ppc32 code. This will be all the more incorrect once support for > -fpatchable-function-entry is added. Rename files here to more > accurately describe the code: > - ftrace_mprofile.S is renamed to ftrace_entry.S > - ftrace_pg.c is renamed to ftrace_64_pg.c > - ftrace_64_pg.S is rename to ftrace_64_pg_entry.S
The stats from git do not match., it says {ftrace_low.S => ftrace_64_pg_entry.S > > Signed-off-by: Naveen N Rao <nav...@kernel.org> Reviewed-by: Christophe Leroy <christophe.le...@csgroup.eu> > --- > arch/powerpc/kernel/trace/Makefile | 17 +++-- > arch/powerpc/kernel/trace/ftrace_64_pg.S | 67 ------------------- > .../trace/{ftrace_pg.c => ftrace_64_pg.c} | 0 > .../{ftrace_low.S => ftrace_64_pg_entry.S} | 58 +++++++++++++++- > .../{ftrace_mprofile.S => ftrace_entry.S} | 65 ++++++++++++++++++ > 5 files changed, 130 insertions(+), 77 deletions(-) > delete mode 100644 arch/powerpc/kernel/trace/ftrace_64_pg.S > rename arch/powerpc/kernel/trace/{ftrace_pg.c => ftrace_64_pg.c} (100%) > rename arch/powerpc/kernel/trace/{ftrace_low.S => ftrace_64_pg_entry.S} > (55%) > rename arch/powerpc/kernel/trace/{ftrace_mprofile.S => ftrace_entry.S} (83%) > > diff --git a/arch/powerpc/kernel/trace/Makefile > b/arch/powerpc/kernel/trace/Makefile > index 342a2d1ae86cd0..125f4ca588b98a 100644 > --- a/arch/powerpc/kernel/trace/Makefile > +++ b/arch/powerpc/kernel/trace/Makefile > @@ -6,16 +6,15 @@ > ifdef CONFIG_FUNCTION_TRACER > # do not trace tracer code > CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE) > -CFLAGS_REMOVE_ftrace_pg.o = $(CC_FLAGS_FTRACE) > +CFLAGS_REMOVE_ftrace_64_pg.o = $(CC_FLAGS_FTRACE) > endif > > -obj32-$(CONFIG_FUNCTION_TRACER) += ftrace_mprofile.o ftrace.o > +obj32-$(CONFIG_FUNCTION_TRACER) += ftrace.o ftrace_entry.o > ifdef CONFIG_MPROFILE_KERNEL > -obj64-$(CONFIG_FUNCTION_TRACER) += ftrace_mprofile.o ftrace.o > +obj64-$(CONFIG_FUNCTION_TRACER) += ftrace.o ftrace_entry.o > else > -obj64-$(CONFIG_FUNCTION_TRACER) += ftrace_64_pg.o ftrace_pg.o > +obj64-$(CONFIG_FUNCTION_TRACER) += ftrace_64_pg.o > ftrace_64_pg_entry.o > endif > -obj-$(CONFIG_FUNCTION_TRACER) += ftrace_low.o > obj-$(CONFIG_TRACING) += trace_clock.o > > obj-$(CONFIG_PPC64) += $(obj64-y) > @@ -26,7 +25,7 @@ GCOV_PROFILE_ftrace.o := n > KCOV_INSTRUMENT_ftrace.o := n > KCSAN_SANITIZE_ftrace.o := n > UBSAN_SANITIZE_ftrace.o := n > -GCOV_PROFILE_ftrace_pg.o := n > -KCOV_INSTRUMENT_ftrace_pg.o := n > -KCSAN_SANITIZE_ftrace_pg.o := n > -UBSAN_SANITIZE_ftrace_pg.o := n > +GCOV_PROFILE_ftrace_64_pg.o := n > +KCOV_INSTRUMENT_ftrace_64_pg.o := n > +KCSAN_SANITIZE_ftrace_64_pg.o := n > +UBSAN_SANITIZE_ftrace_64_pg.o := n > diff --git a/arch/powerpc/kernel/trace/ftrace_64_pg.S > b/arch/powerpc/kernel/trace/ftrace_64_pg.S > deleted file mode 100644 > index 6708e24db0aba8..00000000000000 > --- a/arch/powerpc/kernel/trace/ftrace_64_pg.S > +++ /dev/null > @@ -1,67 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0-or-later */ > -/* > - * Split from ftrace_64.S > - */ > - > -#include <linux/magic.h> > -#include <asm/ppc_asm.h> > -#include <asm/asm-offsets.h> > -#include <asm/ftrace.h> > -#include <asm/ppc-opcode.h> > -#include <asm/export.h> > - > -_GLOBAL_TOC(ftrace_caller) > - lbz r3, PACA_FTRACE_ENABLED(r13) > - cmpdi r3, 0 > - beqlr > - > - /* Taken from output of objdump from lib64/glibc */ > - mflr r3 > - ld r11, 0(r1) > - stdu r1, -112(r1) > - std r3, 128(r1) > - ld r4, 16(r11) > - subi r3, r3, MCOUNT_INSN_SIZE > -.globl ftrace_call > -ftrace_call: > - bl ftrace_stub > - nop > -#ifdef CONFIG_FUNCTION_GRAPH_TRACER > -.globl ftrace_graph_call > -ftrace_graph_call: > - b ftrace_graph_stub > -_GLOBAL(ftrace_graph_stub) > -#endif > - ld r0, 128(r1) > - mtlr r0 > - addi r1, r1, 112 > - > -_GLOBAL(ftrace_stub) > - blr > - > -#ifdef CONFIG_FUNCTION_GRAPH_TRACER > -_GLOBAL(ftrace_graph_caller) > - addi r5, r1, 112 > - /* load r4 with local address */ > - ld r4, 128(r1) > - subi r4, r4, MCOUNT_INSN_SIZE > - > - /* Grab the LR out of the caller stack frame */ > - ld r11, 112(r1) > - ld r3, 16(r11) > - > - bl prepare_ftrace_return > - nop > - > - /* > - * prepare_ftrace_return gives us the address we divert to. > - * Change the LR in the callers stack frame to this. > - */ > - ld r11, 112(r1) > - std r3, 16(r11) > - > - ld r0, 128(r1) > - mtlr r0 > - addi r1, r1, 112 > - blr > -#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ > diff --git a/arch/powerpc/kernel/trace/ftrace_pg.c > b/arch/powerpc/kernel/trace/ftrace_64_pg.c > similarity index 100% > rename from arch/powerpc/kernel/trace/ftrace_pg.c > rename to arch/powerpc/kernel/trace/ftrace_64_pg.c > diff --git a/arch/powerpc/kernel/trace/ftrace_low.S > b/arch/powerpc/kernel/trace/ftrace_64_pg_entry.S > similarity index 55% > rename from arch/powerpc/kernel/trace/ftrace_low.S > rename to arch/powerpc/kernel/trace/ftrace_64_pg_entry.S > index 2fc7dd0a5ae968..81dbaf70b1513a 100644 > --- a/arch/powerpc/kernel/trace/ftrace_low.S > +++ b/arch/powerpc/kernel/trace/ftrace_64_pg_entry.S > @@ -1,6 +1,6 @@ > /* SPDX-License-Identifier: GPL-2.0-or-later */ > /* > - * Split from entry_64.S > + * Split from ftrace_64.S > */ > > #include <linux/magic.h> > @@ -10,6 +10,62 @@ > #include <asm/ppc-opcode.h> > #include <asm/export.h> > > +_GLOBAL_TOC(ftrace_caller) > + lbz r3, PACA_FTRACE_ENABLED(r13) > + cmpdi r3, 0 > + beqlr > + > + /* Taken from output of objdump from lib64/glibc */ > + mflr r3 > + ld r11, 0(r1) > + stdu r1, -112(r1) > + std r3, 128(r1) > + ld r4, 16(r11) > + subi r3, r3, MCOUNT_INSN_SIZE > +.globl ftrace_call > +ftrace_call: > + bl ftrace_stub > + nop > +#ifdef CONFIG_FUNCTION_GRAPH_TRACER > +.globl ftrace_graph_call > +ftrace_graph_call: > + b ftrace_graph_stub > +_GLOBAL(ftrace_graph_stub) > +#endif > + ld r0, 128(r1) > + mtlr r0 > + addi r1, r1, 112 > + > +_GLOBAL(ftrace_stub) > + blr > + > +#ifdef CONFIG_FUNCTION_GRAPH_TRACER > +_GLOBAL(ftrace_graph_caller) > + addi r5, r1, 112 > + /* load r4 with local address */ > + ld r4, 128(r1) > + subi r4, r4, MCOUNT_INSN_SIZE > + > + /* Grab the LR out of the caller stack frame */ > + ld r11, 112(r1) > + ld r3, 16(r11) > + > + bl prepare_ftrace_return > + nop > + > + /* > + * prepare_ftrace_return gives us the address we divert to. > + * Change the LR in the callers stack frame to this. > + */ > + ld r11, 112(r1) > + std r3, 16(r11) > + > + ld r0, 128(r1) > + mtlr r0 > + addi r1, r1, 112 > + blr > +#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ > + > .pushsection ".tramp.ftrace.text","aw",@progbits; > .globl ftrace_tramp_text > ftrace_tramp_text: > diff --git a/arch/powerpc/kernel/trace/ftrace_mprofile.S > b/arch/powerpc/kernel/trace/ftrace_entry.S > similarity index 83% > rename from arch/powerpc/kernel/trace/ftrace_mprofile.S > rename to arch/powerpc/kernel/trace/ftrace_entry.S > index ffb1db38684998..e8339706e735b1 100644 > --- a/arch/powerpc/kernel/trace/ftrace_mprofile.S > +++ b/arch/powerpc/kernel/trace/ftrace_entry.S > @@ -249,3 +249,68 @@ livepatch_handler: > /* Return to original caller of live patched function */ > blr > #endif /* CONFIG_LIVEPATCH */ > + > +_GLOBAL(mcount) > +_GLOBAL(_mcount) > +EXPORT_SYMBOL(_mcount) > + mflr r12 > + mtctr r12 > + mtlr r0 > + bctr > + > +#ifdef CONFIG_FUNCTION_GRAPH_TRACER > +_GLOBAL(return_to_handler) > + /* need to save return values */ > +#ifdef CONFIG_PPC64 > + std r4, -32(r1) > + std r3, -24(r1) > + /* save TOC */ > + std r2, -16(r1) > + std r31, -8(r1) > + mr r31, r1 > + stdu r1, -112(r1) > + > + /* > + * We might be called from a module. > + * Switch to our TOC to run inside the core kernel. > + */ > + LOAD_PACA_TOC() > +#else > + stwu r1, -16(r1) > + stw r3, 8(r1) > + stw r4, 12(r1) > +#endif > + > + bl ftrace_return_to_handler > + nop > + > + /* return value has real return address */ > + mtlr r3 > + > +#ifdef CONFIG_PPC64 > + ld r1, 0(r1) > + ld r4, -32(r1) > + ld r3, -24(r1) > + ld r2, -16(r1) > + ld r31, -8(r1) > +#else > + lwz r3, 8(r1) > + lwz r4, 12(r1) > + addi r1, r1, 16 > +#endif > + > + /* Jump back to real return address */ > + blr > +#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ > + > +.pushsection ".tramp.ftrace.text","aw",@progbits; > +.globl ftrace_tramp_text > +ftrace_tramp_text: > + .space 32 > +.popsection > + > +.pushsection ".tramp.ftrace.init","aw",@progbits; > +.globl ftrace_tramp_init > +ftrace_tramp_init: > + .space 32 > +.popsection