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: V3: https://lore.kernel.org/all/20221005053234.29312-1-bg...@linux.ibm.com/ V2: https://lore.kernel.org/all/20220926064316.765967-1-bg...@linux.ibm.com/ V1: https://lore.kernel.org/all/20220916062330.430468-1-bg...@linux.ibm.com/ RFC: https://lore.kernel.org/linuxppc-dev/20220901055823.152983-1-bg...@linux.ibm.com/ Still rebased on top of https://lore.kernel.org/all/0df84a2eea551c1d000c34c36d0c1d23cbe26a97.1664289176.git.christophe.le...@csgroup.eu/ Changed for V4: [1/6] * IS_ENABLED(CONFIG_PPC64) added to patch size condition for better compiler optimisation [2/6] * Reworded message * Refactored need r2 save expression. Parens are intentional, C operator precedence can be difficult to remember, especially when three different kinds are used in a single expression. 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: 86de6882270620777fe9cc16ece97e9ee407122c -- 2.37.3