Commit ccb67544 authored by Daniel Bristot de Oliveira's avatar Daniel Bristot de Oliveira Committed by Steven Rostedt (VMware)
Browse files

tracing/osnoise: Remove TIMERLAT ifdefs from inside functions

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: default avatarSteven Rostedt <rostedt@goodmis.org>
Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent dae18134
Loading
Loading
Loading
Loading
+106 −44
Original line number Diff line number Diff line
@@ -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);