mbox series

[00/17] powerpc/ftrace: refactor and add support for -fpatchable-function-entry

Message ID cover.1687166935.git.naveen@kernel.org (mailing list archive)
Headers show
Series powerpc/ftrace: refactor and add support for -fpatchable-function-entry | expand

Message

Naveen N Rao June 19, 2023, 9:47 a.m. UTC
Since RFC (*):
- Patches 1 and 17 have been included in this series due to 
  dependencies. Both had been posted out separately.
- Patch 10 has a small change to not throw errors when checking 
  instruction sequence generated by older toolchains.

This has had more testing since and this looks good to me. Christophe 
mentioned that this results in a slowdown with ftrace [de-]activation on 
ppc32, but that isn't performance critical and we can address that 
separately.


(*) http://lore.kernel.org/cover.1686151854.git.naveen@kernel.org


- Naveen


Naveen N Rao (17):
  powerpc/ftrace: Fix dropping weak symbols with older toolchains
  powerpc/module: Remove unused .ftrace.tramp section
  powerpc64/ftrace: Move ELFv1 and -pg support code into a separate file
  powerpc/ftrace: Simplify function_graph support in ftrace.c
  powerpc/ftrace: Use FTRACE_REGS_ADDR to identify the correct ftrace
    trampoline
  powerpc/ftrace: Extend ftrace support for large kernels to ppc32
  powerpc/ftrace: Consolidate ftrace support into fewer files
  powerpc/ftrace: Refactor ftrace_modify_code()
  powerpc/ftrace: Stop re-purposing linker generated long branches for
    ftrace
  powerpc/ftrace: Add separate ftrace_init_nop() with additional
    validation
  powerpc/ftrace: Simplify ftrace_make_nop()
  powerpc/ftrace: Simplify ftrace_make_call()
  powerpc/ftrace: Simplify ftrace_modify_call()
  powerpc/ftrace: Replace use of ftrace_call_replace() with
    ftrace_create_branch_inst()
  powerpc/ftrace: Implement ftrace_replace_code()
  powerpc/ftrace: Add support for -fpatchable-function-entry
  powerpc/ftrace: Create a dummy stackframe to fix stack unwind

 arch/powerpc/Kconfig                          |  14 +-
 arch/powerpc/Makefile                         |   5 +
 arch/powerpc/include/asm/ftrace.h             |  24 +-
 arch/powerpc/include/asm/module.h             |   4 -
 arch/powerpc/include/asm/sections.h           |   2 +
 arch/powerpc/include/asm/vermagic.h           |   4 +-
 arch/powerpc/kernel/module_64.c               |   2 +-
 arch/powerpc/kernel/trace/Makefile            |  12 +-
 arch/powerpc/kernel/trace/ftrace.c            | 910 +++++-------------
 arch/powerpc/kernel/trace/ftrace_64_pg.S      |  67 --
 arch/powerpc/kernel/trace/ftrace_64_pg.c      | 846 ++++++++++++++++
 .../{ftrace_low.S => ftrace_64_pg_entry.S}    |  64 +-
 .../{ftrace_mprofile.S => ftrace_entry.S}     |  78 +-
 arch/powerpc/kernel/vmlinux.lds.S             |   4 -
 .../gcc-check-fpatchable-function-entry.sh    |  26 +
 15 files changed, 1288 insertions(+), 774 deletions(-)
 delete mode 100644 arch/powerpc/kernel/trace/ftrace_64_pg.S
 create mode 100644 arch/powerpc/kernel/trace/ftrace_64_pg.c
 rename arch/powerpc/kernel/trace/{ftrace_low.S => ftrace_64_pg_entry.S} (54%)
 rename arch/powerpc/kernel/trace/{ftrace_mprofile.S => ftrace_entry.S} (79%)
 create mode 100755 arch/powerpc/tools/gcc-check-fpatchable-function-entry.sh


base-commit: 12ffddc6444780aec83fa5086673ec005c0bace4

Comments

Michael Ellerman Aug. 23, 2023, 11:55 a.m. UTC | #1
On Mon, 19 Jun 2023 15:17:18 +0530, Naveen N Rao wrote:
> Since RFC (*):
> - Patches 1 and 17 have been included in this series due to
>   dependencies. Both had been posted out separately.
> - Patch 10 has a small change to not throw errors when checking
>   instruction sequence generated by older toolchains.
> 
> This has had more testing since and this looks good to me. Christophe
> mentioned that this results in a slowdown with ftrace [de-]activation on
> ppc32, but that isn't performance critical and we can address that
> separately.
> 
> [...]

Patch 1-16 applied to powerpc/next.

[01/17] powerpc/ftrace: Fix dropping weak symbols with older toolchains
        https://git.kernel.org/powerpc/c/f6834c8c59a8e977a6f6e4f96c5d28dfa5db8430
[02/17] powerpc/module: Remove unused .ftrace.tramp section
        https://git.kernel.org/powerpc/c/0240605931ec300ddb698020edff05a4c93edbb2
[03/17] powerpc64/ftrace: Move ELFv1 and -pg support code into a separate file
        https://git.kernel.org/powerpc/c/7f7797b372693ce17223678428490dea2b3e4389
[04/17] powerpc/ftrace: Simplify function_graph support in ftrace.c
        https://git.kernel.org/powerpc/c/96d7a13610abcf6bff9d0d0e195c6d2650310125
[05/17] powerpc/ftrace: Use FTRACE_REGS_ADDR to identify the correct ftrace trampoline
        https://git.kernel.org/powerpc/c/b5efb61c70f8ba9b1e168185530b9c7342184a4c
[06/17] powerpc/ftrace: Extend ftrace support for large kernels to ppc32
        https://git.kernel.org/powerpc/c/f3993a0330e2d11e42c095810c6c33084024df46
[07/17] powerpc/ftrace: Consolidate ftrace support into fewer files
        https://git.kernel.org/powerpc/c/bad90aa52d9a0141c41e00ccd4c40be30a29acc6
[08/17] powerpc/ftrace: Refactor ftrace_modify_code()
        https://git.kernel.org/powerpc/c/f4fcbf2e093e25a7faa8a3c2a5097524114e9547
[09/17] powerpc/ftrace: Stop re-purposing linker generated long branches for ftrace
        https://git.kernel.org/powerpc/c/33bb8a0be9c826fce545ae390ecaf91e96b5db43
[10/17] powerpc/ftrace: Add separate ftrace_init_nop() with additional validation
        https://git.kernel.org/powerpc/c/cc93b9233230312a8a905fabd590c405d60f9edd
[11/17] powerpc/ftrace: Simplify ftrace_make_nop()
        https://git.kernel.org/powerpc/c/562bde0bfc968d212d10ba6bf921a0774feebbac
[12/17] powerpc/ftrace: Simplify ftrace_make_call()
        https://git.kernel.org/powerpc/c/9365e23b15f28b7b3b333a7fc6f4c8e9464ca99f
[13/17] powerpc/ftrace: Simplify ftrace_modify_call()
        https://git.kernel.org/powerpc/c/67385738e3c248673668663ffb434ae4e0abf7f1
[14/17] powerpc/ftrace: Replace use of ftrace_call_replace() with ftrace_create_branch_inst()
        https://git.kernel.org/powerpc/c/a26ce4272eea2b20d4f39b9d7e56daf0c77151d8
[15/17] powerpc/ftrace: Implement ftrace_replace_code()
        https://git.kernel.org/powerpc/c/c91c5a828685563c24ab8879d8386de356d9085a
[16/17] powerpc/ftrace: Add support for -fpatchable-function-entry
        https://git.kernel.org/powerpc/c/0f71dcfb4aef6043da6cc509e7a7f6a3ae87c12d

cheers