[REGRESSION] Random oops on SG2042 with Linux 6.16-rc and dynamic ftrace
Steven Rostedt
rostedt at goodmis.org
Tue Jul 1 08:21:16 PDT 2025
On Tue, 1 Jul 2025 14:27:32 +0200
Alexandre Ghiti <alex at ghiti.fr> wrote:
> @@ -149,16 +157,17 @@ int ftrace_init_nop(struct module *mod, struct
> dyn_ftrace *rec)
> unsigned int nops[2], offset;
> int ret;
>
> + mutex_lock(&text_mutex);
This looks like a prime candidate for:
guard(mutex)(&text_mutex);
> ret = ftrace_rec_set_nop_ops(rec);
> if (ret)
> - return ret;
> + goto end;
Then this change wouldn't be needed.
>
> offset = (unsigned long) &ftrace_caller - pc;
> 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);
> +end:
> mutex_unlock(&text_mutex);
and "end:" as well as the mutex_unlock() can be removed.
>
> return ret;
>
>
> Andy is also taking a look, I'll let him confirm the above fix is correct.
>
> Thanks for the thorough report!
Yes, thank you Yao Zi for the very detailed bug report! That made
things so much easier.
-- Steve
More information about the linux-riscv
mailing list