On Sun, 13 Apr 2025 09:44:44 +0800 Menglong Dong <menglong8.dong@xxxxxxxxx> wrote: > The maximum of the ftrace hash bits is made fls(32) in > register_ftrace_direct(), which seems illogical. So, we fix it by making > the max hash bits FTRACE_HASH_MAX_BITS instead. > Loogs good to me. Acked-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> Thanks! > Fixes: d05cb470663a ("ftrace: Fix modification of direct_function hash while in use") > Signed-off-by: Menglong Dong <dongml2@xxxxxxxxxxxxxxx> > --- > v2: > - thanks for Steven's advice, we fix the problem by making the max hash > bits FTRACE_HASH_MAX_BITS instead. > --- > kernel/trace/ftrace.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > index 1a48aedb5255..d153ad13e0e0 100644 > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -5914,9 +5914,10 @@ int register_ftrace_direct(struct ftrace_ops *ops, unsigned long addr) > > /* Make a copy hash to place the new and the old entries in */ > size = hash->count + direct_functions->count; > - if (size > 32) > - size = 32; > - new_hash = alloc_ftrace_hash(fls(size)); > + size = fls(size); > + if (size > FTRACE_HASH_MAX_BITS) > + size = FTRACE_HASH_MAX_BITS; > + new_hash = alloc_ftrace_hash(size); > if (!new_hash) > goto out_unlock; > > -- > 2.39.5 > > -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>