llvm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] riscv: ftrace: atmoic patching and preempt improvements
@ 2024-06-13  7:11 Andy Chiu
  2024-06-13  7:11 ` [PATCH 1/8] riscv: stacktrace: convert arch_stack_walk() to noinstr Andy Chiu
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: Andy Chiu @ 2024-06-13  7:11 UTC (permalink / raw)
  To: Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	Zong Li, Steven Rostedt, Masami Hiramatsu, Mark Rutland,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Puranjay Mohan
  Cc: Palmer Dabbelt, linux-riscv, linux-kernel, linux-trace-kernel,
	llvm, Andy Chiu, Evgenii Shatokhin

This series makes atmoic code patching possible in riscv ftrace. A
direct benefit of this is that we can get rid of stop_machine() when
patching function entries. This also makes it possible to run ftrace
with full kernel preemption. Before this series, the kernel initializes
patchable function entries to NOP4 + NOP4. To start tracing, it updates
entries to AUIPC + JALR while holding other cores in stop_machine.
stop_machine() is required because it is impossible to update 2
instructions, and be seen atomically. And preemption must have to be
prevented, as kernel preemption allows process to be scheduled out while
executing on one of these instruction pairs.

This series addresses the problem by initializing the first NOP4 to
AUIPC. So, atmoic patching is possible because the kernel only has to
update one instruction. As long as the instruction is naturally aligned,
then it is expected to be updated atomically.

However, the address range of the ftrace trampoline is limited to +-2K
from ftrace_caller after appplying this series. This issue is expected
to be solved by Puranjay's CALL_OPS, where it adds 8B naturally align
data in front of pacthable functions and can  use it to direct execution
out to any custom trampolines.

The series is composed by two parts. The first part (1-3) cleans up
existing issues that was found during testing of and not caused by the
implementation. The second part modifies the ftrace code patching
mechanism (4-6) as mentioned above. Then prepare ftrace to be able to
run with kernel preemption (7,8)

---
Andy Chiu (8):
      riscv: stacktrace: convert arch_stack_walk() to noinstr
      tracing: do not trace kernel_text_address()
      riscv: ftrace: support fastcc in Clang for WITH_ARGS
      riscv: ftrace: align patchable functions to 4 Byte boundary
      riscv: ftrace: prepare ftrace for atomic code patching
      riscv: ftrace: do not use stop_machine to update code
      riscv: vector: Support calling schedule() for preemptible Vector
      riscv: ftrace: support PREEMPT

 arch/riscv/Kconfig                 |   3 +-
 arch/riscv/Makefile                |   7 +-
 arch/riscv/include/asm/ftrace.h    |  11 +++
 arch/riscv/include/asm/processor.h |   5 ++
 arch/riscv/include/asm/vector.h    |  22 +++++-
 arch/riscv/kernel/asm-offsets.c    |   7 ++
 arch/riscv/kernel/ftrace.c         | 133 ++++++++++++++++---------------------
 arch/riscv/kernel/mcount-dyn.S     |  25 +++++--
 arch/riscv/kernel/stacktrace.c     |   2 +-
 kernel/extable.c                   |   4 +-
 10 files changed, 129 insertions(+), 90 deletions(-)
---
base-commit: 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0
change-id: 20240613-dev-andyc-dyn-ftrace-v4-941d4a00ea19

Best regards,
-- 
Andy Chiu <andy.chiu@sifive.com>


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-06-25 15:45 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-13  7:11 [PATCH 0/8] riscv: ftrace: atmoic patching and preempt improvements Andy Chiu
2024-06-13  7:11 ` [PATCH 1/8] riscv: stacktrace: convert arch_stack_walk() to noinstr Andy Chiu
2024-06-18  9:55   ` Alexandre Ghiti
2024-06-25 15:45     ` Palmer Dabbelt
2024-06-13  7:11 ` [PATCH 2/8] tracing: do not trace kernel_text_address() Andy Chiu
2024-06-13 13:32   ` Steven Rostedt
2024-06-17  2:10     ` Andy Chiu
2024-06-13  7:11 ` [PATCH 3/8] riscv: ftrace: support fastcc in Clang for WITH_ARGS Andy Chiu
2024-06-13 22:36   ` Nathan Chancellor
2024-06-13  7:11 ` [PATCH 4/8] riscv: ftrace: align patchable functions to 4 Byte boundary Andy Chiu
2024-06-13 19:09   ` Nathan Chancellor
2024-06-17  2:38     ` Andy Chiu
2024-06-17  3:13       ` Andy Chiu
2024-06-17 16:52       ` Nathan Chancellor
2024-06-13  7:11 ` [PATCH 5/8] riscv: ftrace: prepare ftrace for atomic code patching Andy Chiu
2024-06-13  7:11 ` [PATCH 6/8] riscv: ftrace: do not use stop_machine to update code Andy Chiu
2024-06-13  7:11 ` [PATCH 7/8] riscv: vector: Support calling schedule() for preemptible Vector Andy Chiu
2024-06-13  7:11 ` [PATCH 8/8] riscv: ftrace: support PREEMPT Andy Chiu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).