riscv: Fix text patching when IPI are used
authorAlexandre Ghiti <alexghiti@rivosinc.com>
Thu, 29 Feb 2024 12:10:56 +0000 (13:10 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 17 Apr 2024 01:27:47 +0000 (18:27 -0700)
commitc97bf629963e52b205ed5fbaf151e5bd342f9c63
tree87bc3f31fc0badf08ea02ae6516ad49055cdcf6c
parent29cee75fb66e6f2845360e0598974253bf79181a
riscv: Fix text patching when IPI are used

For now, we use stop_machine() to patch the text and when we use IPIs for
remote icache flushes (which is emitted in patch_text_nosync()), the system
hangs.

So instead, make sure every CPU executes the stop_machine() patching
function and emit a local icache flush there.

Co-developed-by: Björn Töpel <bjorn@rivosinc.com>
Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Andrea Parri <parri.andrea@gmail.com>
Link: https://lore.kernel.org/r/20240229121056.203419-3-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/patch.h
arch/riscv/kernel/ftrace.c
arch/riscv/kernel/patch.c