[0/8] arm64: ftrace cleanup + FTRACE_WITH_REGS
mbox series

Message ID 20191021163426.9408-1-mark.rutland@arm.com
Headers show
Series
  • arm64: ftrace cleanup + FTRACE_WITH_REGS
Related show

Message

Mark Rutland Oct. 21, 2019, 4:34 p.m. UTC
Hi,

This series is a reworked version of Torsten's v8 FTRACE_WITH_REGS
series [1]. I've tried to rework the existing code in preparatory
patches so that the patchable-function-entry bits slot in with fewer
surprises. This version is based on v5.4-rc3, and can be found in my
arm64/ftrace-with-regs branch [2].

I've added an (optional) ftrace_init_nop(), which the core code uses to
initialize callsites. This allows us to avoid a synthetic MCOUNT_ADDR
symbol, and more cleanly separates the one-time initialization of the
callsite from dynamic NOP<->CALL modification. Architectures which don't
implement this get the existing ftrace_make_nop() with MCOUNT_ADDR.

I've moved the module PLT initialization to module load time, which
simplifies runtime callsite modification. This also means that we don't
transitently mark the module text RW, and will allow for the removal of
module_disable_ro().

Since the last posting, parisc gained ftrace support using
patchable-function-entry. I've made the handling of module callsite
locations common in kernel/module.c with a new FTRACE_CALLSITE_SECTION
definition, and removed the newly redundant bits from arch/parisc.

Thanks,
Mark.

[1] https://lore.kernel.org/r/20190208150826.44EBC68DD2@newverein.lst.de
[2] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git arm64/ftrace-with-regs

Mark Rutland (7):
  ftrace: add ftrace_init_nop()
  module/ftrace: handle patchable-function-entry
  arm64: module: rework special section handling
  arm64: module/ftrace: intialize PLT at load time
  arm64: insn: add encoder for MOV (register)
  arm64: asm-offsets: add S_FP
  arm64: ftrace: minimize ifdeffery

Torsten Duwe (1):
  arm64: implement ftrace with regs

 arch/arm64/Kconfig               |   2 +
 arch/arm64/Makefile              |   5 ++
 arch/arm64/include/asm/ftrace.h  |  23 +++++++
 arch/arm64/include/asm/insn.h    |   3 +
 arch/arm64/include/asm/module.h  |   2 +-
 arch/arm64/kernel/asm-offsets.c  |   1 +
 arch/arm64/kernel/entry-ftrace.S | 140 +++++++++++++++++++++++++++++++++++++--
 arch/arm64/kernel/ftrace.c       | 123 ++++++++++++++++++++--------------
 arch/arm64/kernel/insn.c         |  13 ++++
 arch/arm64/kernel/module-plts.c  |   3 +-
 arch/arm64/kernel/module.c       |  57 +++++++++++++---
 arch/parisc/Makefile             |   1 -
 arch/parisc/kernel/module.c      |  10 ++-
 arch/parisc/kernel/module.lds    |   7 --
 include/linux/ftrace.h           |   5 ++
 kernel/module.c                  |   2 +-
 kernel/trace/ftrace.c            |  13 +++-
 17 files changed, 330 insertions(+), 80 deletions(-)
 delete mode 100644 arch/parisc/kernel/module.lds

Comments

Ard Biesheuvel Oct. 24, 2019, 4:32 p.m. UTC | #1
On Mon, 21 Oct 2019 at 18:34, Mark Rutland <mark.rutland@arm.com> wrote:
>
> Hi,
>
> This series is a reworked version of Torsten's v8 FTRACE_WITH_REGS
> series [1]. I've tried to rework the existing code in preparatory
> patches so that the patchable-function-entry bits slot in with fewer
> surprises. This version is based on v5.4-rc3, and can be found in my
> arm64/ftrace-with-regs branch [2].
>
> I've added an (optional) ftrace_init_nop(), which the core code uses to
> initialize callsites. This allows us to avoid a synthetic MCOUNT_ADDR
> symbol, and more cleanly separates the one-time initialization of the
> callsite from dynamic NOP<->CALL modification. Architectures which don't
> implement this get the existing ftrace_make_nop() with MCOUNT_ADDR.
>
> I've moved the module PLT initialization to module load time, which
> simplifies runtime callsite modification. This also means that we don't
> transitently mark the module text RW, and will allow for the removal of
> module_disable_ro().
>
> Since the last posting, parisc gained ftrace support using
> patchable-function-entry. I've made the handling of module callsite
> locations common in kernel/module.c with a new FTRACE_CALLSITE_SECTION
> definition, and removed the newly redundant bits from arch/parisc.
>
> Thanks,
> Mark.
>
> [1] https://lore.kernel.org/r/20190208150826.44EBC68DD2@newverein.lst.de
> [2] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git arm64/ftrace-with-regs
>
> Mark Rutland (7):
>   ftrace: add ftrace_init_nop()
>   module/ftrace: handle patchable-function-entry
>   arm64: module: rework special section handling
>   arm64: module/ftrace: intialize PLT at load time
>   arm64: insn: add encoder for MOV (register)
>   arm64: asm-offsets: add S_FP
>   arm64: ftrace: minimize ifdeffery
>
> Torsten Duwe (1):
>   arm64: implement ftrace with regs
>

For the series,

Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>  arch/arm64/Kconfig               |   2 +
>  arch/arm64/Makefile              |   5 ++
>  arch/arm64/include/asm/ftrace.h  |  23 +++++++
>  arch/arm64/include/asm/insn.h    |   3 +
>  arch/arm64/include/asm/module.h  |   2 +-
>  arch/arm64/kernel/asm-offsets.c  |   1 +
>  arch/arm64/kernel/entry-ftrace.S | 140 +++++++++++++++++++++++++++++++++++++--
>  arch/arm64/kernel/ftrace.c       | 123 ++++++++++++++++++++--------------
>  arch/arm64/kernel/insn.c         |  13 ++++
>  arch/arm64/kernel/module-plts.c  |   3 +-
>  arch/arm64/kernel/module.c       |  57 +++++++++++++---
>  arch/parisc/Makefile             |   1 -
>  arch/parisc/kernel/module.c      |  10 ++-
>  arch/parisc/kernel/module.lds    |   7 --
>  include/linux/ftrace.h           |   5 ++
>  kernel/module.c                  |   2 +-
>  kernel/trace/ftrace.c            |  13 +++-
>  17 files changed, 330 insertions(+), 80 deletions(-)
>  delete mode 100644 arch/parisc/kernel/module.lds
>
> --
> 2.11.0
>