Skip to content

Commit

Permalink
tracing: Have traceon and traceoff trigger honor the instance
Browse files Browse the repository at this point in the history
commit 302e9ed upstream.

If a trigger is set on an event to disable or enable tracing within an
instance, then tracing should be disabled or enabled in the instance and
not at the top level, which is confusing to users.

Link: https://lkml.kernel.org/r/20220223223837.14f94ec3@rorschach.local.home

Cc: stable@vger.kernel.org
Fixes: ae63b31 ("tracing: Separate out trace events from global variables")
Tested-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Reviewed-by: Tom Zanussi <zanussi@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
rostedt authored and gregkh committed Mar 2, 2022
1 parent 99eb8d6 commit afbeee1
Showing 1 changed file with 46 additions and 6 deletions.
52 changes: 46 additions & 6 deletions kernel/trace/trace_events_trigger.c
Expand Up @@ -940,6 +940,16 @@ static void
traceon_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
struct trace_event_file *file = data->private_data;

if (file) {
if (tracer_tracing_is_on(file->tr))
return;

tracer_tracing_on(file->tr);
return;
}

if (tracing_is_on())
return;

Expand All @@ -950,22 +960,42 @@ static void
traceon_count_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
if (tracing_is_on())
return;
struct trace_event_file *file = data->private_data;

if (file) {
if (tracer_tracing_is_on(file->tr))
return;
} else {
if (tracing_is_on())
return;
}

if (!data->count)
return;

if (data->count != -1)
(data->count)--;

tracing_on();
if (file)
tracer_tracing_on(file->tr);
else
tracing_on();
}

static void
traceoff_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
struct trace_event_file *file = data->private_data;

if (file) {
if (!tracer_tracing_is_on(file->tr))
return;

tracer_tracing_off(file->tr);
return;
}

if (!tracing_is_on())
return;

Expand All @@ -976,16 +1006,26 @@ static void
traceoff_count_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
if (!tracing_is_on())
return;
struct trace_event_file *file = data->private_data;

if (file) {
if (!tracer_tracing_is_on(file->tr))
return;
} else {
if (!tracing_is_on())
return;
}

if (!data->count)
return;

if (data->count != -1)
(data->count)--;

tracing_off();
if (file)
tracer_tracing_off(file->tr);
else
tracing_off();
}

static int
Expand Down

0 comments on commit afbeee1

Please sign in to comment.