On Tue, May 09, 2023 at 10:36:42PM +0100, Conor Dooley wrote: > From: Conor Dooley <conor.dooley@xxxxxxxxxxxxx> > > Guenter reported a lockdep splat that appears to have been present for a > while in v6.1.y & the backports of the riscv_patch_in_stop_machine dance > did nothing to help here, as the lock is not being taken when > patch_text_nosync() is called in riscv_cpufeature_patch_func(). > Add the lock/unlock; elide the splat. > > Fixes: c15ac4fd60d5 ("riscv/ftrace: Add dynamic function tracer support") > Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx> > cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx> Tested-by: Guenter Roeck <linux@xxxxxxxxxxxx> Guenter > --- > arch/riscv/kernel/cpufeature.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c > index 694267d1fe81..fd1238df6149 100644 > --- a/arch/riscv/kernel/cpufeature.c > +++ b/arch/riscv/kernel/cpufeature.c > @@ -9,6 +9,7 @@ > #include <linux/bitmap.h> > #include <linux/ctype.h> > #include <linux/libfdt.h> > +#include <linux/memory.h> > #include <linux/module.h> > #include <linux/of.h> > #include <asm/alternative.h> > @@ -316,8 +317,11 @@ void __init_or_module riscv_cpufeature_patch_func(struct alt_entry *begin, > } > > tmp = (1U << alt->errata_id); > - if (cpu_req_feature & tmp) > + if (cpu_req_feature & tmp) { > + mutex_lock(&text_mutex); > patch_text_nosync(alt->old_ptr, alt->alt_ptr, alt->alt_len); > + mutex_unlock(&text_mutex); > + } > } > } > #endif > -- > 2.39.2 >