On Tue, 22 Feb 2022 17:52:59 -0800 Luis Chamberlain <mcgrof@xxxxxxxxxx> wrote: > On Wed, Feb 23, 2022 at 09:23:11AM +0800, Wei Xiao wrote: > > This moves ftrace_enabled to trace/ftrace.c. > > Hey Wei, thanks for you patch! > > This does not explain how this is being to help with maitenance as > otherwise this makes kernel/sysctl.c hard to maintain and we also tend > to get many conflicts. It also does not explain how all the filesystem > sysctls are not gone and that this is just the next step, moving slowly > the rest of the sysctls. Explaining this in the commit log will help > patch review and subsystem maintainers understand the conext / logic > behind the move. > > I'd be more than happy to take this if ftrace folks Ack. To avoid conflicts > I can route this through sysctl-next which is put forward in particular > to avoid conflicts across trees for this effort. Let me know. I'm fine with this change going through another tree. Acked-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> for your convenience. > > > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > > index f9feb197b2da..4a5b4d6996a4 100644 > > --- a/kernel/trace/ftrace.c > > +++ b/kernel/trace/ftrace.c > > @@ -7846,7 +7846,8 @@ static bool is_permanent_ops_registered(void) > > return false; > > } > > > > -int > > +#ifdef CONFIG_SYSCTL > > +static int > > Is the ifdef really needed? It was not there before, ie, does > ftrace not depend on sysctls? I don't see a direct relationship > but I do wonder if its implicit. I think because the function is now static, and that it now includes the structure itself, that the #ifdef is added. When I first saw it, I was a bit uncomfortable with adding more #ifdefs, but for this use case, I believe it's OK. > > > ftrace_enable_sysctl(struct ctl_table *table, int write, > > void *buffer, size_t *lenp, loff_t *ppos) > > { > > @@ -7889,3 +7890,22 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, > > mutex_unlock(&ftrace_lock); > > return ret; > > } > > + > > +static struct ctl_table ftrace_sysctls[] = { > > + { > > + .procname = "ftrace_enabled", > > + .data = &ftrace_enabled, > > + .maxlen = sizeof(int), > > + .mode = 0644, > > + .proc_handler = ftrace_enable_sysctl, > > + }, > > + {} > > +}; > > + > > +static int __init ftrace_sysctl_init(void) > > +{ > > + register_sysctl_init("kernel", ftrace_sysctls); > > + return 0; > > +} > > +late_initcall(ftrace_sysctl_init); > > +#endif > > There's other __init calls already on ftrace, would this be better > placed in one of them, and then have this be a no-op iff we determine > ftrace can be built without sysctls and then have a no-op for when > sysctls are disabled. I rather have the initcall here, as the other initcalls are special needs, and not generic functions. -- Steve