tracing/osnoise: Remove TIMERLAT ifdefs from inside functions
authorDaniel Bristot de Oliveira <bristot@kernel.org>
Sun, 31 Oct 2021 18:05:01 +0000 (19:05 +0100)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 1 Nov 2021 22:10:15 +0000 (18:10 -0400)
Remove CONFIG_TIMERLAT_TRACER from inside functions, avoiding
compilation problems in the future.

Link: https://lkml.kernel.org/r/8245abb5a112d249f5da6c1df499244ad9e647bc.1635702894.git.bristot@kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Tom Zanussi <zanussi@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Cc: John Kacur <jkacur@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: linux-rt-users@vger.kernel.org
Cc: linux-trace-devel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_osnoise.c

index 490615f..5e832e3 100644 (file)
@@ -321,6 +321,57 @@ static struct osnoise_data {
 #endif
 };
 
+#ifdef CONFIG_TIMERLAT_TRACER
+static inline bool timerlat_enabled(void)
+{
+       return osnoise_data.timerlat_tracer;
+}
+
+static inline int timerlat_softirq_exit(struct osnoise_variables *osn_var)
+{
+       struct timerlat_variables *tlat_var = this_cpu_tmr_var();
+       /*
+        * If the timerlat is enabled, but the irq handler did
+        * not run yet enabling timerlat_tracer, do not trace.
+        */
+       if (!tlat_var->tracing_thread) {
+               osn_var->softirq.arrival_time = 0;
+               osn_var->softirq.delta_start = 0;
+               return 0;
+       }
+       return 1;
+}
+
+static inline int timerlat_thread_exit(struct osnoise_variables *osn_var)
+{
+       struct timerlat_variables *tlat_var = this_cpu_tmr_var();
+       /*
+        * If the timerlat is enabled, but the irq handler did
+        * not run yet enabling timerlat_tracer, do not trace.
+        */
+       if (!tlat_var->tracing_thread) {
+               osn_var->thread.delta_start = 0;
+               osn_var->thread.arrival_time = 0;
+               return 0;
+       }
+       return 1;
+}
+#else /* CONFIG_TIMERLAT_TRACER */
+static inline bool timerlat_enabled(void)
+{
+       return false;
+}
+
+static inline int timerlat_softirq_exit(struct osnoise_variables *osn_var)
+{
+       return 1;
+}
+static inline int timerlat_thread_exit(struct osnoise_variables *osn_var)
+{
+       return 1;
+}
+#endif
+
 #ifdef CONFIG_PREEMPT_RT
 /*
  * Print the osnoise header info.
@@ -978,21 +1029,9 @@ static void trace_softirq_exit_callback(void *data, unsigned int vec_nr)
        if (!osn_var->sampling)
                return;
 
-#ifdef CONFIG_TIMERLAT_TRACER
-       /*
-        * If the timerlat is enabled, but the irq handler did
-        * not run yet enabling timerlat_tracer, do not trace.
-        */
-       if (unlikely(osnoise_data.timerlat_tracer)) {
-               struct timerlat_variables *tlat_var;
-               tlat_var = this_cpu_tmr_var();
-               if (!tlat_var->tracing_thread) {
-                       osn_var->softirq.arrival_time = 0;
-                       osn_var->softirq.delta_start = 0;
+       if (unlikely(timerlat_enabled()))
+               if (!timerlat_softirq_exit(osn_var))
                        return;
-               }
-       }
-#endif
 
        duration = get_int_safe_duration(osn_var, &osn_var->softirq.delta_start);
        trace_softirq_noise(vec_nr, osn_var->softirq.arrival_time, duration);
@@ -1086,17 +1125,9 @@ thread_exit(struct osnoise_variables *osn_var, struct task_struct *t)
        if (!osn_var->sampling)
                return;
 
-#ifdef CONFIG_TIMERLAT_TRACER
-       if (osnoise_data.timerlat_tracer) {
-               struct timerlat_variables *tlat_var;
-               tlat_var = this_cpu_tmr_var();
-               if (!tlat_var->tracing_thread) {
-                       osn_var->thread.delta_start = 0;
-                       osn_var->thread.arrival_time = 0;
+       if (unlikely(timerlat_enabled()))
+               if (!timerlat_thread_exit(osn_var))
                        return;
-               }
-       }
-#endif
 
        duration = get_int_safe_duration(osn_var, &osn_var->thread.delta_start);
 
@@ -1600,6 +1631,11 @@ static int timerlat_main(void *data)
        hrtimer_cancel(&tlat->timer);
        return 0;
 }
+#else /* CONFIG_TIMERLAT_TRACER */
+static int timerlat_main(void *data)
+{
+       return 0;
+}
 #endif /* CONFIG_TIMERLAT_TRACER */
 
 /*
@@ -1642,16 +1678,13 @@ static int start_kthread(unsigned int cpu)
        void *main = osnoise_main;
        char comm[24];
 
-#ifdef CONFIG_TIMERLAT_TRACER
-       if (osnoise_data.timerlat_tracer) {
+       if (timerlat_enabled()) {
                snprintf(comm, 24, "timerlat/%d", cpu);
                main = timerlat_main;
        } else {
                snprintf(comm, 24, "osnoise/%d", cpu);
        }
-#else
-       snprintf(comm, 24, "osnoise/%d", cpu);
-#endif
+
        kthread = kthread_create_on_cpu(main, NULL, cpu, comm);
 
        if (IS_ERR(kthread)) {
@@ -1945,6 +1978,35 @@ static const struct file_operations cpus_fops = {
        .llseek         = generic_file_llseek,
 };
 
+#ifdef CONFIG_TIMERLAT_TRACER
+/*
+ * init_timerlat_tracefs - A function to initialize the timerlat interface files
+ */
+static int init_timerlat_tracefs(struct dentry *top_dir)
+{
+       struct dentry *tmp;
+
+#ifdef CONFIG_STACKTRACE
+       tmp = tracefs_create_file("print_stack", TRACE_MODE_WRITE, top_dir,
+                                 &osnoise_print_stack, &trace_min_max_fops);
+       if (!tmp)
+               return -ENOMEM;
+#endif
+
+       tmp = tracefs_create_file("timerlat_period_us", TRACE_MODE_WRITE, top_dir,
+                                 &timerlat_period, &trace_min_max_fops);
+       if (!tmp)
+               return -ENOMEM;
+
+       return 0;
+}
+#else /* CONFIG_TIMERLAT_TRACER */
+static int init_timerlat_tracefs(struct dentry *top_dir)
+{
+       return 0;
+}
+#endif /* CONFIG_TIMERLAT_TRACER */
+
 /*
  * init_tracefs - A function to initialize the tracefs interface files
  *
@@ -1989,19 +2051,10 @@ static int init_tracefs(void)
        tmp = trace_create_file("cpus", TRACE_MODE_WRITE, top_dir, NULL, &cpus_fops);
        if (!tmp)
                goto err;
-#ifdef CONFIG_TIMERLAT_TRACER
-#ifdef CONFIG_STACKTRACE
-       tmp = tracefs_create_file("print_stack", TRACE_MODE_WRITE, top_dir,
-                                 &osnoise_print_stack, &trace_min_max_fops);
-       if (!tmp)
-               goto err;
-#endif
 
-       tmp = tracefs_create_file("timerlat_period_us", TRACE_MODE_WRITE, top_dir,
-                                 &timerlat_period, &trace_min_max_fops);
-       if (!tmp)
+       ret = init_timerlat_tracefs(top_dir);
+       if (ret)
                goto err;
-#endif
 
        return 0;
 
@@ -2207,6 +2260,16 @@ static struct tracer timerlat_tracer __read_mostly = {
        .print_header   = print_timerlat_headers,
        .allow_instances = true,
 };
+
+__init static int init_timerlat_tracer(void)
+{
+       return register_tracer(&timerlat_tracer);
+}
+#else /* CONFIG_TIMERLAT_TRACER */
+__init static int init_timerlat_tracer(void)
+{
+       return 0;
+}
 #endif /* CONFIG_TIMERLAT_TRACER */
 
 __init static int init_osnoise_tracer(void)
@@ -2223,13 +2286,12 @@ __init static int init_osnoise_tracer(void)
                return ret;
        }
 
-#ifdef CONFIG_TIMERLAT_TRACER
-       ret = register_tracer(&timerlat_tracer);
+       ret = init_timerlat_tracer();
        if (ret) {
-               pr_err(BANNER "Error registering timerlat\n");
+               pr_err(BANNER "Error registering timerlat!\n");
                return ret;
        }
-#endif
+
        osnoise_init_hotplug_support();
 
        INIT_LIST_HEAD_RCU(&osnoise_instances);