From: Benjamin Gray <bgray@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: ajd@linux.ibm.com, peterz@infradead.org,
Benjamin Gray <bgray@linux.ibm.com>,
npiggin@gmail.com, ardb@kernel.org, jbaron@akamai.com,
rostedt@goodmis.org, jpoimboe@kernel.org
Subject: [PATCH v3 0/6] Out-of-line static calls for powerpc64 ELF V2
Date: Wed, 5 Oct 2022 16:32:28 +1100 [thread overview]
Message-ID: <20221005053234.29312-1-bgray@linux.ibm.com> (raw)
Implementation of out-of-line static calls for PowerPC 64-bit ELF V2 ABI.
Static calls patch an indirect branch into a direct branch at runtime.
Out-of-line specifically has a caller directly call a trampoline, and
the trampoline gets patched to directly call the target.
Previous versions here:
V2: https://lore.kernel.org/all/20220926064316.765967-1-bgray@linux.ibm.com/
V1: https://lore.kernel.org/all/20220916062330.430468-1-bgray@linux.ibm.com/
Changed for V3:
[general]
* Rebased on top of
https://lore.kernel.org/all/0df84a2eea551c1d000c34c36d0c1d23cbe26a97.1664289176.git.christophe.leroy@csgroup.eu/
for removing the separate CONFIG_STRICT_KERNEL_RWX cases. Can rebase back onto next if necessary.
* Some some minor refactoring/style fixes throughout
[1/6]
* Code patching rewritten again
* This time it only adds support for what is needed:
* int or long sized writes only
* assumed within a cacheline (static call pointers are aligned
for atomic updates, instructions are aligned anyway)
* unconditional instruction syncing because non-instruction
patching is not used in any performance sensitive paths
* similarly, dword case is marked unlikely. ftrace activation is biggest
performance concern, and it only uses non-prefixed instructions.
* Should be zero difference on 32-bit, minor differences on 64-bit
* Design doesn't need to be revisited unless specifically 1 or 2 byte
patching is needed. Most such patches can be emulated by read-update-store
of 4 bytes. Non-cacheline safe patches can be split similarly (they
can't have atomicity requirements if they aren't aligned).
[3/6]
* Refactored to use patch_branch (thx Christophe)
[5/6]
* Required .localentry NAME, 1 directive guarded by toolchain version check
* Removed #ifdef's from static call implementation. Added sign_extend_long to
support this.
* Fixed a bug in ppc_function_toc handling of lis case & made it more verbose
to make such errors stand out more. New layout splits into calculating required
values, and then applying them in two steps.
[6/6]
* Replaced SAVE_REGS/RESTORE_REGS macros with functions
* Reduced global register usage of tests
* Support running on 32-bit as well
Benjamin Gray (6):
powerpc/code-patching: Implement generic text patching function
powerpc/module: Handle caller-saved TOC in module linker
powerpc/module: Optimise nearby branches in ELF V2 ABI stub
static_call: Move static call selftest to static_call_selftest.c
powerpc/64: Add support for out-of-line static calls
powerpc: Add tests for out-of-line static calls
arch/powerpc/Kconfig | 26 ++-
arch/powerpc/include/asm/code-patching.h | 30 +++
arch/powerpc/include/asm/static_call.h | 80 ++++++-
arch/powerpc/kernel/Makefile | 4 +-
arch/powerpc/kernel/module_64.c | 26 ++-
arch/powerpc/kernel/static_call.c | 183 +++++++++++++++-
arch/powerpc/kernel/static_call_test.c | 263 +++++++++++++++++++++++
arch/powerpc/kernel/static_call_test.h | 56 +++++
arch/powerpc/lib/code-patching.c | 73 +++++--
kernel/Makefile | 1 +
kernel/static_call_inline.c | 43 ----
kernel/static_call_selftest.c | 41 ++++
12 files changed, 753 insertions(+), 73 deletions(-)
create mode 100644 arch/powerpc/kernel/static_call_test.c
create mode 100644 arch/powerpc/kernel/static_call_test.h
create mode 100644 kernel/static_call_selftest.c
base-commit: 9a5e80596e50f1ab19fecb2d337e7ea3287ee083
--
2.37.3
next reply other threads:[~2022-10-05 5:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-05 5:32 Benjamin Gray [this message]
2022-10-05 5:32 ` [PATCH v3 1/6] powerpc/code-patching: Implement generic text patching function Benjamin Gray
2022-10-05 17:55 ` Christophe Leroy
2022-10-06 3:36 ` Benjamin Gray
2022-10-06 9:19 ` Christophe Leroy
2022-10-06 21:53 ` Benjamin Gray
2022-10-05 5:32 ` [PATCH v3 2/6] powerpc/module: Handle caller-saved TOC in module linker Benjamin Gray
2022-10-05 19:18 ` Christophe Leroy
2022-10-06 3:51 ` Andrew Donnellan
2022-10-06 4:39 ` Benjamin Gray
2022-10-05 5:32 ` [PATCH v3 3/6] powerpc/module: Optimise nearby branches in ELF V2 ABI stub Benjamin Gray
2022-10-05 19:21 ` Christophe Leroy
2022-10-06 8:24 ` Andrew Donnellan
2022-10-05 5:32 ` [PATCH v3 4/6] static_call: Move static call selftest to static_call_selftest.c Benjamin Gray
2022-10-05 19:22 ` Christophe Leroy
2022-10-05 5:32 ` [PATCH v3 5/6] powerpc/64: Add support for out-of-line static calls Benjamin Gray
2022-10-05 19:38 ` Christophe Leroy
2022-10-06 0:39 ` Michael Ellerman
2022-10-06 5:01 ` Benjamin Gray
2022-10-06 18:22 ` Segher Boessenkool
2022-10-06 18:38 ` Christophe Leroy
2022-10-06 20:45 ` Segher Boessenkool
2022-10-06 20:50 ` Christophe Leroy
2022-10-06 21:04 ` Segher Boessenkool
2022-10-05 5:32 ` [PATCH v3 6/6] powerpc: Add tests " Benjamin Gray
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=20221005053234.29312-1-bgray@linux.ibm.com \
--to=bgray@linux.ibm.com \
--cc=ajd@linux.ibm.com \
--cc=ardb@kernel.org \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--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: 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.