Merge patch series "riscv: Optimize function trace"
authorPalmer Dabbelt <palmer@rivosinc.com>
Wed, 15 Feb 2023 18:57:13 +0000 (10:57 -0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 15 Feb 2023 18:59:54 +0000 (10:59 -0800)
commitec6311919ea616be69076d03c3e2d2f7769d5f5f
treecd6255ac7e95d6786ac4ebdae7ac8a1cb62d5efe
parent9a5c09dd97014e7f3dc3a440d2ee67fdb33dcc6e
parent6724a76cff85ee271bbbff42ac527e4643b2ec52
Merge patch series "riscv: Optimize function trace"

guoren@kernel.org <guoren@kernel.org> says:

From: Guo Ren <guoren@linux.alibaba.com>

The previous ftrace detour implementation fc76b8b8011 ("riscv: Using
PATCHABLE_FUNCTION_ENTRY instead of MCOUNT") contain three problems.

 - The most horrible bug is preemption panic which found by Andy [1].
   Let's disable preemption for ftrace first, and Andy could continue
   the ftrace preemption work.
 - The "-fpatchable-function-entry= CFLAG" wasted code size
   !RISCV_ISA_C.
 - The ftrace detour implementation wasted code size.
 - When livepatching, the trampoline (ftrace_regs_caller) would not
   return to <func_prolog+12> but would rather jump to the new function.
   So, "REG_L ra, -SZREG(sp)" would not run and the original return
   address would not be restored. The kernel is likely to hang or crash
   as a result. (Found by Evgenii Shatokhin [4])

[Palmer: The first three patches in this series are pretty concrete
fixes, so I'm pulling them ahead of the rest of the series.]

* b4-shazam-merge:
  riscv: ftrace: Reduce the detour code size to half
  riscv: ftrace: Remove wasted nops for !RISCV_ISA_C
  riscv: ftrace: Fixup panic by disabling preemption

Link: https://lore.kernel.org/r/20230112090603.1295340-1-guoren@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig
arch/riscv/Makefile