2022-02-24 03:44:31

by Steven Rostedt

[permalink] [raw]
Subject: [PATCH] tracing: Have traceon and traceoff trigger honor the instance

From: "Steven Rostedt (Google)" <[email protected]>

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.

Cc: [email protected]
Fixes: ae63b31e4d0e2 ("tracing: Separate out trace events from global variables")
Signed-off-by: Steven Rostedt (Google) <[email protected]>
---
kernel/trace/trace_events_trigger.c | 52 +++++++++++++++++++++++++----
1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index e0d50c9577f3..efe563140f27 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -1295,6 +1295,16 @@ traceon_trigger(struct event_trigger_data *data,
struct trace_buffer *buffer, 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;

@@ -1306,8 +1316,15 @@ traceon_count_trigger(struct event_trigger_data *data,
struct trace_buffer *buffer, 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;
@@ -1315,7 +1332,10 @@ traceon_count_trigger(struct event_trigger_data *data,
if (data->count != -1)
(data->count)--;

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

static void
@@ -1323,6 +1343,16 @@ traceoff_trigger(struct event_trigger_data *data,
struct trace_buffer *buffer, 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;

@@ -1334,8 +1364,15 @@ traceoff_count_trigger(struct event_trigger_data *data,
struct trace_buffer *buffer, 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;
@@ -1343,7 +1380,10 @@ traceoff_count_trigger(struct event_trigger_data *data,
if (data->count != -1)
(data->count)--;

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

static int
--
2.34.1


Subject: Re: [PATCH] tracing: Have traceon and traceoff trigger honor the instance

On 2/24/22 04:38, Steven Rostedt wrote:
> From: "Steven Rostedt (Google)" <[email protected]>
>
> 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.
>
> Cc: [email protected]
> Fixes: ae63b31e4d0e2 ("tracing: Separate out trace events from global variables")
> Signed-off-by: Steven Rostedt (Google) <[email protected]>

Tested-by: Daniel Bristot de Oliveira <[email protected]>

Thanks!
-- Daniel

2022-02-25 23:44:44

by Tom Zanussi

[permalink] [raw]
Subject: Re: [PATCH] tracing: Have traceon and traceoff trigger honor the instance

Hi Steve,

On Wed, 2022-02-23 at 22:38 -0500, Steven Rostedt wrote:
> From: "Steven Rostedt (Google)" <[email protected]>
>
> 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.
>
> Cc: [email protected]
> Fixes: ae63b31e4d0e2 ("tracing: Separate out trace events from global
> variables")
> Signed-off-by: Steven Rostedt (Google) <[email protected]>
> ---
> kernel/trace/trace_events_trigger.c | 52 +++++++++++++++++++++++++
> ----
> 1 file changed, 46 insertions(+), 6 deletions(-)
>
> diff --git a/kernel/trace/trace_events_trigger.c
> b/kernel/trace/trace_events_trigger.c
> index e0d50c9577f3..efe563140f27 100644
> --- a/kernel/trace/trace_events_trigger.c
> +++ b/kernel/trace/trace_events_trigger.c
> @@ -1295,6 +1295,16 @@ traceon_trigger(struct event_trigger_data
> *data,
> struct trace_buffer *buffer, 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;
>
> @@ -1306,8 +1316,15 @@ traceon_count_trigger(struct
> event_trigger_data *data,
> struct trace_buffer *buffer, 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;
> @@ -1315,7 +1332,10 @@ traceon_count_trigger(struct
> event_trigger_data *data,
> if (data->count != -1)
> (data->count)--;
>
> - tracing_on();
> + if (file)
> + tracer_tracing_on(file->tr);
> + else
> + tracing_on();
> }
>
> static void
> @@ -1323,6 +1343,16 @@ traceoff_trigger(struct event_trigger_data
> *data,
> struct trace_buffer *buffer, 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;
>
> @@ -1334,8 +1364,15 @@ traceoff_count_trigger(struct
> event_trigger_data *data,
> struct trace_buffer *buffer, 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;
> @@ -1343,7 +1380,10 @@ traceoff_count_trigger(struct
> event_trigger_data *data,
> if (data->count != -1)
> (data->count)--;
>
> - tracing_off();
> + if (file)
> + tracer_tracing_off(file->tr);
> + else
> + tracing_off();
> }
>
> static int


Looks good,

Reviewed-by: Tom Zanussi <[email protected]>

Thanks,

Tom


2022-02-26 01:27:50

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] tracing: Have traceon and traceoff trigger honor the instance

On Fri, 25 Feb 2022 11:00:18 -0600
Tom Zanussi <[email protected]> wrote:

> Looks good,
>
> Reviewed-by: Tom Zanussi <[email protected]>

Thanks.

Oo, I was just about to send my pull request. It's not too late to add
this tag ;-)

-- Steve