On Tue, Jul 8, 2025 at 4:47 PM Alexandre Ghiti <alexgh...@rivosinc.com> wrote: > > As reported by lockdep, some patching was done without acquiring > text_mutex, so there could be a race when mapping the page to patch > since we use the same fixmap entry. > > Reported-by: Han Gao <rabenda...@gmail.com> > Reported-by: Vivian Wang <wangruik...@iscas.ac.cn> > Reported-by: Yao Zi <zi...@disroot.org> > Closes: https://lore.kernel.org/linux-riscv/agodmpq7tgind...@pie.lan/ > Tested-by: Yao Zi <zi...@disroot.org> > Signed-off-by: Alexandre Ghiti <alexgh...@rivosinc.com>
Reviewed-by: Andy Chiu <andyb...@gmail.com> > --- > arch/riscv/kernel/ftrace.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/arch/riscv/kernel/ftrace.c b/arch/riscv/kernel/ftrace.c > index > 4c6c24380cfd9d6c51f0e4340cd674160b83a610..22e7bdf8de2b6ca950cf2c8b734bc82ea46ba8bf > 100644 > --- a/arch/riscv/kernel/ftrace.c > +++ b/arch/riscv/kernel/ftrace.c > @@ -14,6 +14,16 @@ > #include <asm/text-patching.h> > > #ifdef CONFIG_DYNAMIC_FTRACE > +void ftrace_arch_code_modify_prepare(void) > +{ > + mutex_lock(&text_mutex); > +} > + > +void ftrace_arch_code_modify_post_process(void) > +{ > + mutex_unlock(&text_mutex); > +} > + > unsigned long ftrace_call_adjust(unsigned long addr) > { > if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS)) > @@ -29,10 +39,8 @@ unsigned long arch_ftrace_get_symaddr(unsigned long > fentry_ip) > > void arch_ftrace_update_code(int command) > { > - mutex_lock(&text_mutex); > command |= FTRACE_MAY_SLEEP; > ftrace_modify_all_code(command); > - mutex_unlock(&text_mutex); > flush_icache_all(); > } > > @@ -149,6 +157,8 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace > *rec) > unsigned int nops[2], offset; > int ret; > > + guard(mutex)(&text_mutex); > + > ret = ftrace_rec_set_nop_ops(rec); > if (ret) > return ret; > @@ -157,9 +167,7 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace > *rec) > nops[0] = to_auipc_t0(offset); > nops[1] = RISCV_INSN_NOP4; > > - mutex_lock(&text_mutex); > ret = patch_insn_write((void *)pc, nops, 2 * MCOUNT_INSN_SIZE); > - mutex_unlock(&text_mutex); > > return ret; > } > > --- > base-commit: d7b8f8e20813f0179d8ef519541a3527e7661d3a > change-id: 20250708-alex-fixes-1e719b9899f3 > > Best regards, > -- > Alexandre Ghiti <alexgh...@rivosinc.com> > > > _______________________________________________ > linux-riscv mailing list > linux-ri...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv