[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20211025220856.7fef7581@rorschach.local.home>
Date: Mon, 25 Oct 2021 22:08:56 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Daniel Bristot de Oliveira <bristot@...nel.org>
Cc: Ingo Molnar <mingo@...hat.com>, Tom Zanussi <zanussi@...nel.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
Juri Lelli <juri.lelli@...hat.com>,
Clark Williams <williams@...hat.com>,
John Kacur <jkacur@...hat.com>,
Peter Zijlstra <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
linux-rt-users@...r.kernel.org, linux-trace-devel@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH V5 06/20] trace/osnoise: Allow multiple instances of the
same tracer
On Mon, 25 Oct 2021 19:40:31 +0200
Daniel Bristot de Oliveira <bristot@...nel.org> wrote:
> kernel/trace/trace_osnoise.c | 101 +++++++++++++++++++++++++++--------
> 1 file changed, 78 insertions(+), 23 deletions(-)
>
> diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
> index 3db506f49a90..8681ffc3817b 100644
> --- a/kernel/trace/trace_osnoise.c
> +++ b/kernel/trace/trace_osnoise.c
> @@ -64,6 +64,24 @@ static bool osnoise_has_registered_instances(void)
> list);
> }
>
> +/*
> + * osnoise_instance_registered - check if a tr is already registered
> + */
> +static int osnoise_instance_registered(struct trace_array *tr)
> +{
> + struct osnoise_instance *inst;
> + int found = 0;
> +
> + rcu_read_lock();
> + list_for_each_entry_rcu(inst, &osnoise_instances, list) {
> + if (inst->tr == tr)
> + found = 1;
> + }
> + rcu_read_unlock();
> +
> + return found;
> +}
> +
> /*
> * osnoise_register_instance - register a new trace instance
> *
> @@ -2048,6 +2066,16 @@ static int osnoise_workload_start(void)
> {
> int retval;
>
> + /*
> + * Instances need to be registered after calling workload
> + * start. Hence, if there is already an instance, the
> + * workload was already registered. Otherwise, this
> + * code is on the way to register the first instance,
> + * and the workload will start.
> + */
> + if (osnoise_has_registered_instances())
> + return 0;
Looking at how this is checked before being called, it really should
return -1, as it is an error if this is called with instances active.
-- Steve
> +
> osn_var_reset_all();
>
> retval = osnoise_hook_events();
> @@ -2075,6 +2103,13 @@ static int osnoise_workload_start(void)
> */
> static void osnoise_workload_stop(void)
> {
> + /*
> + * Instances need to be unregistered before calling
> + * stop. Hence, if there is a registered instance, more
> + * than one instance is running, and the workload will not
> + * yet stop. Otherwise, this code is on the way to disable
> + * the last instance, and the workload can stop.
> + */
> if (osnoise_has_registered_instances())
> return;
>
> @@ -2096,7 +2131,11 @@ static void osnoise_tracer_start(struct trace_array *tr)
> {
> int retval;
>
> - if (osnoise_has_registered_instances())
> + /*
> + * If the instance is already registered, there is no need to
> + * register it again.
> + */
> + if (osnoise_instance_registered(tr))
> return;
>
> retval = osnoise_workload_start();
Powered by blists - more mailing lists