This moves ftrace_enabled to trace/ftrace.c.
We move sysctls to places where features actually belong to improve
the readability of the code and reduce the risk of code merge conflicts.
At the same time, the proc-sysctl maintainers do not want to know what
sysctl knobs you wish to add for your owner piece of code, we just care
about the core logic.
Signed-off-by: Wei Xiao <xiaowei66@huawei.com>
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
 #ifdef CONFIG_FUNCTION_TRACER
 
 extern int ftrace_enabled;
-extern int
-ftrace_enable_sysctl(struct ctl_table *table, int write,
-                    void *buffer, size_t *lenp, loff_t *ppos);
 
 #ifndef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS
 
 
                .proc_handler   = proc_dointvec,
        },
 #endif
-#ifdef CONFIG_FUNCTION_TRACER
-       {
-               .procname       = "ftrace_enabled",
-               .data           = &ftrace_enabled,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = ftrace_enable_sysctl,
-       },
-#endif
 #ifdef CONFIG_STACK_TRACER
        {
                .procname       = "stack_tracer_enabled",
 
        return false;
 }
 
-int
+#ifdef CONFIG_SYSCTL
+static int
 ftrace_enable_sysctl(struct ctl_table *table, int write,
                     void *buffer, size_t *lenp, loff_t *ppos)
 {
        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