From: Naveen N Rao <naveen@kernel.org>
To: <linuxppc-dev@lists.ozlabs.org>,
<linux-trace-kernel@vger.kernel.org>, <bpf@vger.kernel.org>,
linux-kbuild@vger.kernel.org, <linux-kernel@vger.kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Masahiro Yamada <masahiroy@kernel.org>,
Hari Bathini <hbathini@linux.ibm.com>,
Mahesh Salgaonkar <mahesh@linux.ibm.com>,
Vishal Chourasia <vishalc@linux.ibm.com>
Subject: [RFC PATCH v4 00/17] powerpc: Core ftrace rework, support for ftrace direct and bpf trampolines
Date: Sun, 14 Jul 2024 13:57:36 +0530 [thread overview]
Message-ID: <cover.1720942106.git.naveen@kernel.org> (raw)
This is v4 of the series posted here:
http://lkml.kernel.org/r/cover.1718908016.git.naveen@kernel.org
This series reworks core ftrace support on powerpc to have the function
profiling sequence moved out of line. This enables us to have a single
nop at kernel function entry virtually eliminating effect of the
function tracer when it is not enabled. The function profile sequence is
moved out of line and is allocated at two separate places depending on a
new config option.
For 64-bit powerpc, the function profiling sequence is also updated to
include an additional instruction 'mtlr r0' after the usual
two-instruction sequence to fix link stack imbalance (return address
predictor) when ftrace is enabled. This showed an improvement of ~22% in
null_syscall benchmark on a Power 10 system with ftrace enabled.
Finally, support for ftrace direct calls is added based on support for
DYNAMIC_FTRACE_WITH_CALL_OPS. BPF Trampoline support is added atop this.
Support for ftrace direct calls is added for 32-bit powerpc. There is
some code to enable bpf trampolines for 32-bit powerpc, but it is not
complete and will need to be pursued separately.
This is marked RFC so that this can get more testing. Patches 1 to 10
are independent of this series and can go in separately though. Rest of
the patches depend on the series from Benjamin Gray adding support for
patch_uint() and patch_ulong():
http://lkml.kernel.org/r/20240515024445.236364-1-bgray@linux.ibm.com
Changelog v4:
- Patches 1, 10 and 13 are new.
- Address review comments from Nick. Numerous changes throughout the
patch series.
- Extend support for ftrace ool to vmlinux text up to 64MB (patch 13).
- Address remaining TODOs in support for BPF Trampolines.
- Update synchronization when patching instructions during trampoline
attach/detach.
- Naveen
Naveen N Rao (17):
powerpc/trace: Account for -fpatchable-function-entry support by
toolchain
powerpc/kprobes: Use ftrace to determine if a probe is at function
entry
powerpc64/ftrace: Nop out additional 'std' instruction emitted by gcc
v5.x
powerpc32/ftrace: Unify 32-bit and 64-bit ftrace entry code
powerpc/module_64: Convert #ifdef to IS_ENABLED()
powerpc/ftrace: Remove pointer to struct module from dyn_arch_ftrace
powerpc/ftrace: Skip instruction patching if the instructions are the
same
powerpc/ftrace: Move ftrace stub used for init text before _einittext
powerpc64/bpf: Fold bpf_jit_emit_func_call_hlp() into
bpf_jit_emit_func_call_rel()
powerpc/ftrace: Add a postlink script to validate function tracer
kbuild: Add generic hook for architectures to use before the final
vmlinux link
powerpc64/ftrace: Move ftrace sequence out of line
powerpc64/ftrace: Support .text larger than 32MB with out-of-line
stubs
powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_CALL_OPS
powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_DIRECT_CALLS
samples/ftrace: Add support for ftrace direct samples on powerpc
powerpc64/bpf: Add support for bpf trampolines
arch/Kconfig | 6 +
arch/powerpc/Kconfig | 23 +-
arch/powerpc/Makefile | 8 +
arch/powerpc/Makefile.postlink | 8 +
arch/powerpc/include/asm/ftrace.h | 32 +-
arch/powerpc/include/asm/module.h | 5 +
arch/powerpc/include/asm/ppc-opcode.h | 14 +
arch/powerpc/kernel/asm-offsets.c | 11 +
arch/powerpc/kernel/kprobes.c | 18 +-
arch/powerpc/kernel/module_64.c | 66 +-
arch/powerpc/kernel/trace/Makefile | 11 +-
arch/powerpc/kernel/trace/ftrace.c | 295 ++++++-
arch/powerpc/kernel/trace/ftrace_64_pg.c | 69 +-
arch/powerpc/kernel/trace/ftrace_entry.S | 246 ++++--
arch/powerpc/kernel/vmlinux.lds.S | 3 +-
arch/powerpc/net/bpf_jit.h | 12 +
arch/powerpc/net/bpf_jit_comp.c | 842 +++++++++++++++++++-
arch/powerpc/net/bpf_jit_comp32.c | 7 +-
arch/powerpc/net/bpf_jit_comp64.c | 68 +-
arch/powerpc/tools/Makefile | 10 +
arch/powerpc/tools/ftrace-gen-ool-stubs.sh | 52 ++
arch/powerpc/tools/ftrace_check.sh | 45 ++
samples/ftrace/ftrace-direct-modify.c | 85 +-
samples/ftrace/ftrace-direct-multi-modify.c | 101 ++-
samples/ftrace/ftrace-direct-multi.c | 79 +-
samples/ftrace/ftrace-direct-too.c | 83 +-
samples/ftrace/ftrace-direct.c | 69 +-
scripts/Makefile.vmlinux | 8 +
scripts/link-vmlinux.sh | 11 +-
29 files changed, 2083 insertions(+), 204 deletions(-)
create mode 100644 arch/powerpc/tools/Makefile
create mode 100755 arch/powerpc/tools/ftrace-gen-ool-stubs.sh
create mode 100755 arch/powerpc/tools/ftrace_check.sh
base-commit: 582b0e554593e530b1386eacafee6c412c5673cc
prerequisite-patch-id: a1d50e589288239d5a8b1c1f354cd4737057c9d3
prerequisite-patch-id: da4142d56880861bd0ad7ad7087c9e2670a2ee54
prerequisite-patch-id: 609d292e054b2396b603890522a940fa0bdfb6d8
prerequisite-patch-id: 6f7213fb77b1260defbf43be0e47bff9c80054cc
prerequisite-patch-id: ad3b71bf071ae4ba1bee5b087e61a2055772a74f
--
2.45.2
next reply other threads:[~2024-07-14 8:28 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-14 8:27 Naveen N Rao [this message]
2024-07-14 8:27 ` [RFC PATCH v4 01/17] powerpc/trace: Account for -fpatchable-function-entry support by toolchain Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 02/17] powerpc/kprobes: Use ftrace to determine if a probe is at function entry Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 03/17] powerpc64/ftrace: Nop out additional 'std' instruction emitted by gcc v5.x Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 04/17] powerpc32/ftrace: Unify 32-bit and 64-bit ftrace entry code Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 05/17] powerpc/module_64: Convert #ifdef to IS_ENABLED() Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 06/17] powerpc/ftrace: Remove pointer to struct module from dyn_arch_ftrace Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 07/17] powerpc/ftrace: Skip instruction patching if the instructions are the same Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 08/17] powerpc/ftrace: Move ftrace stub used for init text before _einittext Naveen N Rao
2024-07-15 6:52 ` Nicholas Piggin
2024-07-14 8:27 ` [RFC PATCH v4 09/17] powerpc64/bpf: Fold bpf_jit_emit_func_call_hlp() into bpf_jit_emit_func_call_rel() Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 10/17] powerpc/ftrace: Add a postlink script to validate function tracer Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 11/17] kbuild: Add generic hook for architectures to use before the final vmlinux link Naveen N Rao
2024-07-15 7:29 ` Nicholas Piggin
2024-07-14 8:27 ` [RFC PATCH v4 12/17] powerpc64/ftrace: Move ftrace sequence out of line Naveen N Rao
2024-07-15 8:25 ` Nicholas Piggin
2024-07-15 12:42 ` David Laight
2024-08-27 9:12 ` Masahiro Yamada
2024-07-14 8:27 ` [RFC PATCH v4 13/17] powerpc64/ftrace: Support .text larger than 32MB with out-of-line stubs Naveen N Rao
2024-07-15 8:27 ` Nicholas Piggin
2024-07-14 8:27 ` [RFC PATCH v4 14/17] powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_CALL_OPS Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 15/17] powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_DIRECT_CALLS Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 16/17] samples/ftrace: Add support for ftrace direct samples on powerpc Naveen N Rao
2024-07-14 8:27 ` [RFC PATCH v4 17/17] powerpc64/bpf: Add support for bpf trampolines Naveen N Rao
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=cover.1720942106.git.naveen@kernel.org \
--to=naveen@kernel.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=daniel@iogearbox.net \
--cc=hbathini@linux.ibm.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mahesh@linux.ibm.com \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=mhiramat@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=rostedt@goodmis.org \
--cc=vishalc@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).