Move trace ctl tables into their own const array in
kernel/trace/trace.c. The sysctl table register is called with
subsys_initcall placing if after its original place in proc_root_init.
This is part of a greater effort to move ctl tables into their
respective subsystems which will reduce the merge conflicts in
kerenel/sysctl.c.
Signed-off-by: Joel Granados <joel.granados@kernel.org>
---
include/linux/ftrace.h | 7 -------
kernel/sysctl.c | 24 ------------------------
kernel/trace/trace.c | 36 +++++++++++++++++++++++++++++++++++-
3 files changed, 35 insertions(+), 32 deletions(-)
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index fbabc3d848b3..59774513ae45 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -1298,16 +1298,9 @@ static inline void unpause_graph_tracing(void) { }
#ifdef CONFIG_TRACING
enum ftrace_dump_mode;
-#define MAX_TRACER_SIZE 100
-extern char ftrace_dump_on_oops[];
extern int ftrace_dump_on_oops_enabled(void);
-extern int tracepoint_printk;
extern void disable_trace_on_warning(void);
-extern int __disable_trace_on_warning;
-
-int tracepoint_printk_sysctl(const struct ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos);
#else /* CONFIG_TRACING */
static inline void disable_trace_on_warning(void) { }
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 6514c13800a4..baa250e223a2 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -51,7 +51,6 @@
#include <linux/nfs_fs.h>
#include <linux/acpi.h>
#include <linux/reboot.h>
-#include <linux/ftrace.h>
#include <linux/perf_event.h>
#include <linux/oom.h>
#include <linux/kmod.h>
@@ -1684,29 +1683,6 @@ static const struct ctl_table kern_table[] = {
.proc_handler = stack_trace_sysctl,
},
#endif
-#ifdef CONFIG_TRACING
- {
- .procname = "ftrace_dump_on_oops",
- .data = &ftrace_dump_on_oops,
- .maxlen = MAX_TRACER_SIZE,
- .mode = 0644,
- .proc_handler = proc_dostring,
- },
- {
- .procname = "traceoff_on_warning",
- .data = &__disable_trace_on_warning,
- .maxlen = sizeof(__disable_trace_on_warning),
- .mode = 0644,
- .proc_handler = proc_dointvec,
- },
- {
- .procname = "tracepoint_printk",
- .data = &tracepoint_printk,
- .maxlen = sizeof(tracepoint_printk),
- .mode = 0644,
- .proc_handler = tracepoint_printk_sysctl,
- },
-#endif
#ifdef CONFIG_MODULES
{
.procname = "modprobe",
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 0e6d517e74e0..abfc0e56173b 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -117,6 +117,7 @@ static int tracing_disabled = 1;
cpumask_var_t __read_mostly tracing_buffer_mask;
+#define MAX_TRACER_SIZE 100
/*
* ftrace_dump_on_oops - variable to dump ftrace buffer on oops
*
@@ -139,7 +140,40 @@ cpumask_var_t __read_mostly tracing_buffer_mask;
char ftrace_dump_on_oops[MAX_TRACER_SIZE] = "0";
/* When set, tracing will stop when a WARN*() is hit */
-int __disable_trace_on_warning;
+static int __disable_trace_on_warning;
+
+int tracepoint_printk_sysctl(const struct ctl_table *table, int write,
+ void *buffer, size_t *lenp, loff_t *ppos);
+static const struct ctl_table trace_sysctl_table[] = {
+ {
+ .procname = "ftrace_dump_on_oops",
+ .data = &ftrace_dump_on_oops,
+ .maxlen = MAX_TRACER_SIZE,
+ .mode = 0644,
+ .proc_handler = proc_dostring,
+ },
+ {
+ .procname = "traceoff_on_warning",
+ .data = &__disable_trace_on_warning,
+ .maxlen = sizeof(__disable_trace_on_warning),
+ .mode = 0644,
+ .proc_handler = proc_dointvec,
+ },
+ {
+ .procname = "tracepoint_printk",
+ .data = &tracepoint_printk,
+ .maxlen = sizeof(tracepoint_printk),
+ .mode = 0644,
+ .proc_handler = tracepoint_printk_sysctl,
+ },
+};
+
+static int __init init_trace_sysctls(void)
+{
+ register_sysctl_init("kernel", trace_sysctl_table);
+ return 0;
+}
+subsys_initcall(init_trace_sysctls);
#ifdef CONFIG_TRACE_EVAL_MAP_FILE
/* Map of enums to their values, for "eval_map" file */
--
2.44.2
On Tue, 18 Feb 2025 10:56:19 +0100
Joel Granados <joel.granados@kernel.org> wrote:
Nit, change the subject to:
tracing: Move trace sysctls into trace.c
as I try to only have the "ftrace:" label for modifications that affect
attaching to functions, and "tracing:" for everything else.
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-- Steve
> Move trace ctl tables into their own const array in
> kernel/trace/trace.c. The sysctl table register is called with
> subsys_initcall placing if after its original place in proc_root_init.
> This is part of a greater effort to move ctl tables into their
> respective subsystems which will reduce the merge conflicts in
> kerenel/sysctl.c.
>
> Signed-off-by: Joel Granados <joel.granados@kernel.org>
> ---
> include/linux/ftrace.h | 7 -------
> kernel/sysctl.c | 24 ------------------------
> kernel/trace/trace.c | 36 +++++++++++++++++++++++++++++++++++-
> 3 files changed, 35 insertions(+), 32 deletions(-)
>
> diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
> index fbabc3d848b3..59774513ae45 100644
> --- a/include/linux/ftrace.h
> +++ b/include/linux/ftrace.h
> @@ -1298,16 +1298,9 @@ static inline void unpause_graph_tracing(void) { }
> #ifdef CONFIG_TRACING
> enum ftrace_dump_mode;
>
> -#define MAX_TRACER_SIZE 100
> -extern char ftrace_dump_on_oops[];
> extern int ftrace_dump_on_oops_enabled(void);
> -extern int tracepoint_printk;
>
> extern void disable_trace_on_warning(void);
> -extern int __disable_trace_on_warning;
> -
> -int tracepoint_printk_sysctl(const struct ctl_table *table, int write,
> - void *buffer, size_t *lenp, loff_t *ppos);
>
> #else /* CONFIG_TRACING */
> static inline void disable_trace_on_warning(void) { }
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 6514c13800a4..baa250e223a2 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -51,7 +51,6 @@
> #include <linux/nfs_fs.h>
> #include <linux/acpi.h>
> #include <linux/reboot.h>
> -#include <linux/ftrace.h>
> #include <linux/perf_event.h>
> #include <linux/oom.h>
> #include <linux/kmod.h>
> @@ -1684,29 +1683,6 @@ static const struct ctl_table kern_table[] = {
> .proc_handler = stack_trace_sysctl,
> },
> #endif
> -#ifdef CONFIG_TRACING
> - {
> - .procname = "ftrace_dump_on_oops",
> - .data = &ftrace_dump_on_oops,
> - .maxlen = MAX_TRACER_SIZE,
> - .mode = 0644,
> - .proc_handler = proc_dostring,
> - },
> - {
> - .procname = "traceoff_on_warning",
> - .data = &__disable_trace_on_warning,
> - .maxlen = sizeof(__disable_trace_on_warning),
> - .mode = 0644,
> - .proc_handler = proc_dointvec,
> - },
> - {
> - .procname = "tracepoint_printk",
> - .data = &tracepoint_printk,
> - .maxlen = sizeof(tracepoint_printk),
> - .mode = 0644,
> - .proc_handler = tracepoint_printk_sysctl,
> - },
> -#endif
> #ifdef CONFIG_MODULES
> {
> .procname = "modprobe",
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index 0e6d517e74e0..abfc0e56173b 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -117,6 +117,7 @@ static int tracing_disabled = 1;
>
> cpumask_var_t __read_mostly tracing_buffer_mask;
>
> +#define MAX_TRACER_SIZE 100
> /*
> * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
> *
> @@ -139,7 +140,40 @@ cpumask_var_t __read_mostly tracing_buffer_mask;
> char ftrace_dump_on_oops[MAX_TRACER_SIZE] = "0";
>
> /* When set, tracing will stop when a WARN*() is hit */
> -int __disable_trace_on_warning;
> +static int __disable_trace_on_warning;
> +
> +int tracepoint_printk_sysctl(const struct ctl_table *table, int write,
> + void *buffer, size_t *lenp, loff_t *ppos);
> +static const struct ctl_table trace_sysctl_table[] = {
> + {
> + .procname = "ftrace_dump_on_oops",
> + .data = &ftrace_dump_on_oops,
> + .maxlen = MAX_TRACER_SIZE,
> + .mode = 0644,
> + .proc_handler = proc_dostring,
> + },
> + {
> + .procname = "traceoff_on_warning",
> + .data = &__disable_trace_on_warning,
> + .maxlen = sizeof(__disable_trace_on_warning),
> + .mode = 0644,
> + .proc_handler = proc_dointvec,
> + },
> + {
> + .procname = "tracepoint_printk",
> + .data = &tracepoint_printk,
> + .maxlen = sizeof(tracepoint_printk),
> + .mode = 0644,
> + .proc_handler = tracepoint_printk_sysctl,
> + },
> +};
> +
> +static int __init init_trace_sysctls(void)
> +{
> + register_sysctl_init("kernel", trace_sysctl_table);
> + return 0;
> +}
> +subsys_initcall(init_trace_sysctls);
>
> #ifdef CONFIG_TRACE_EVAL_MAP_FILE
> /* Map of enums to their values, for "eval_map" file */
>
On Mon, Mar 03, 2025 at 08:44:55PM -0500, Steven Rostedt wrote:
> On Tue, 18 Feb 2025 10:56:19 +0100
> Joel Granados <joel.granados@kernel.org> wrote:
>
> Nit, change the subject to:
>
> tracing: Move trace sysctls into trace.c
Done. Thx for the feedback
Best
>
> as I try to only have the "ftrace:" label for modifications that affect
> attaching to functions, and "tracing:" for everything else.
>
> Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
>
> -- Steve
>
>
> > Move trace ctl tables into their own const array in
> > kernel/trace/trace.c. The sysctl table register is called with
> > subsys_initcall placing if after its original place in proc_root_init.
> > This is part of a greater effort to move ctl tables into their
> > respective subsystems which will reduce the merge conflicts in
> > kerenel/sysctl.c.
> >
> > Signed-off-by: Joel Granados <joel.granados@kernel.org>
> > ---
...
> > + },
> > +};
> > +
> > +static int __init init_trace_sysctls(void)
> > +{
> > + register_sysctl_init("kernel", trace_sysctl_table);
> > + return 0;
> > +}
> > +subsys_initcall(init_trace_sysctls);
> >
> > #ifdef CONFIG_TRACE_EVAL_MAP_FILE
> > /* Map of enums to their values, for "eval_map" file */
> >
>
--
Joel Granados
© 2016 - 2025 Red Hat, Inc.