]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools/rtla: Add osnoise_trace_is_off()
authorCosta Shulyupin <costa.shul@redhat.com>
Wed, 15 Jan 2025 17:58:30 +0000 (19:58 +0200)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Fri, 24 Jan 2025 18:46:11 +0000 (13:46 -0500)
All of the users of trace_is_off() passes in &record->trace as the second
parameter, where record is a pointer to a struct osnoise_tool. This record
could be NULL and there is a hidden dependency that the trace field is the
first field to allow &record->trace to work with a NULL record pointer.

In order to make this code a bit more robust, as record shouldn't be
dereferenced if it is NULL, even if the code does work, create a new
function called osnoise_trace_is_off() that takes the pointer to a
struct osnoise_tool as its second parameter. This way it can properly test
if it is NULL before it dereferences it.

The old function trace_is_off() is removed and the function
osnoise_trace_is_off() is added into osnoise.c which is what the
struct osnoise_tool is associated with.

Cc: John Kacur <jkacur@redhat.com>
Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
Cc: Eder Zulian <ezulian@redhat.com>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Tomas Glozar <tglozar@redhat.com>
Cc: Gabriele Monaco <gmonaco@redhat.com>
Link: https://lore.kernel.org/20250115180055.2136815-1-costa.shul@redhat.com
Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
tools/tracing/rtla/src/osnoise.c
tools/tracing/rtla/src/osnoise.h
tools/tracing/rtla/src/osnoise_hist.c
tools/tracing/rtla/src/osnoise_top.c
tools/tracing/rtla/src/timerlat_hist.c
tools/tracing/rtla/src/timerlat_top.c
tools/tracing/rtla/src/trace.c
tools/tracing/rtla/src/trace.h

index 699a83f538a8e88686a0a9d68518909aff80b3a3..f521f052cbd32a5518296eb90e2c2840cc56f4db 100644 (file)
@@ -1079,6 +1079,22 @@ out_err:
        return NULL;
 }
 
+bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *record)
+{
+       /*
+        * The tool instance is always present, it is the one used to collect
+        * data.
+        */
+       if (!tracefs_trace_is_on(tool->trace.inst))
+               return true;
+
+       /*
+        * The trace record instance is only enabled when -t is set. IOW, when the system
+        * is tracing.
+        */
+       return record && !tracefs_trace_is_on(record->trace.inst);
+}
+
 static void osnoise_usage(int err)
 {
        int i;
index 555f4f4903cc2577b0d5a9ec056877388d81b037..1dc188baddef919047e0b2419ba900ec36916b64 100644 (file)
@@ -104,6 +104,7 @@ struct osnoise_tool {
 void osnoise_destroy_tool(struct osnoise_tool *top);
 struct osnoise_tool *osnoise_init_tool(char *tool_name);
 struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
+bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *record);
 
 int osnoise_hist_main(int argc, char *argv[]);
 int osnoise_top_main(int argc, char **argv);
index 214e2c93fde0166aa92b76d2e6b0b81fe3b76c1a..f250f999a4eee823a7e0c2c48a0da5b3087fe954 100644 (file)
@@ -970,7 +970,7 @@ int osnoise_hist_main(int argc, char *argv[])
                        goto out_hist;
                }
 
-               if (trace_is_off(&tool->trace, &record->trace))
+               if (osnoise_trace_is_off(tool, record))
                        break;
        }
 
@@ -980,7 +980,7 @@ int osnoise_hist_main(int argc, char *argv[])
 
        return_value = 0;
 
-       if (trace_is_off(&tool->trace, &record->trace)) {
+       if (osnoise_trace_is_off(tool, record)) {
                printf("rtla osnoise hit stop tracing\n");
                if (params->trace_output) {
                        printf("  Saving trace to %s\n", params->trace_output);
index 45647495ce3bda571a1d1e85d2855d895edb6e69..6d50653ae224c281418a6d231d3ba60a65c61a85 100644 (file)
@@ -801,7 +801,7 @@ int osnoise_top_main(int argc, char **argv)
                if (!params->quiet)
                        osnoise_print_stats(params, tool);
 
-               if (trace_is_off(&tool->trace, &record->trace))
+               if (osnoise_trace_is_off(tool, record))
                        break;
 
        }
@@ -810,7 +810,7 @@ int osnoise_top_main(int argc, char **argv)
 
        return_value = 0;
 
-       if (trace_is_off(&tool->trace, &record->trace)) {
+       if (osnoise_trace_is_off(tool, record)) {
                printf("osnoise hit stop tracing\n");
                if (params->trace_output) {
                        printf("  Saving trace to %s\n", params->trace_output);
index d4bd02c01c539540aa88f970dd501600a2b5260c..91aedb44da01f059a5657c22c6d3d171161301fd 100644 (file)
@@ -1347,7 +1347,7 @@ int timerlat_hist_main(int argc, char *argv[])
                        goto out_hist;
                }
 
-               if (trace_is_off(&tool->trace, &record->trace))
+               if (osnoise_trace_is_off(tool, record))
                        break;
 
                /* is there still any user-threads ? */
@@ -1368,7 +1368,7 @@ int timerlat_hist_main(int argc, char *argv[])
 
        return_value = 0;
 
-       if (trace_is_off(&tool->trace, &record->trace) && !stop_tracing) {
+       if (osnoise_trace_is_off(tool, record) && !stop_tracing) {
                printf("rtla timerlat hit stop tracing\n");
 
                if (!params->no_aa)
index f387597d3ac22502e8bba18567aac168ebfb6467..51115f92e15ea200fd14032844060f58dea23caf 100644 (file)
@@ -1114,7 +1114,7 @@ int timerlat_top_main(int argc, char *argv[])
        while (!stop_tracing) {
                sleep(params->sleep_time);
 
-               if (params->aa_only && !trace_is_off(&top->trace, &record->trace))
+               if (params->aa_only && !osnoise_trace_is_off(top, record))
                        continue;
 
                retval = tracefs_iterate_raw_events(trace->tep,
@@ -1131,7 +1131,7 @@ int timerlat_top_main(int argc, char *argv[])
                if (!params->quiet)
                        timerlat_print_stats(params, top);
 
-               if (trace_is_off(&top->trace, &record->trace))
+               if (osnoise_trace_is_off(top, record))
                        break;
 
                /* is there still any user-threads ? */
@@ -1152,7 +1152,7 @@ int timerlat_top_main(int argc, char *argv[])
 
        return_value = 0;
 
-       if (trace_is_off(&top->trace, &record->trace) && !stop_tracing) {
+       if (osnoise_trace_is_off(top, record) && !stop_tracing) {
                printf("rtla timerlat hit stop tracing\n");
 
                if (!params->no_aa)
index 440323a997c621737235f0097dff25a392861e0a..80b14b8a3c2ed7a26fd40c9a4c66a75f1b1ee8a3 100644 (file)
@@ -530,25 +530,6 @@ void trace_events_destroy(struct trace_instance *instance,
        trace_events_free(events);
 }
 
-int trace_is_off(struct trace_instance *tool, struct trace_instance *trace)
-{
-       /*
-        * The tool instance is always present, it is the one used to collect
-        * data.
-        */
-       if (!tracefs_trace_is_on(tool->inst))
-               return 1;
-
-       /*
-        * The trace instance is only enabled when -t is set. IOW, when the system
-        * is tracing.
-        */
-       if (trace && !tracefs_trace_is_on(trace->inst))
-               return 1;
-
-       return 0;
-}
-
 /*
  * trace_set_buffer_size - set the per-cpu tracing buffer size.
  */
index 76e1b77291ba2af17fcc09c9263030bb2381b6a5..c3e03f7df770d5af20264e7e619c8f55189a8556 100644 (file)
@@ -48,5 +48,4 @@ int trace_events_enable(struct trace_instance *instance,
 
 int trace_event_add_filter(struct trace_events *event, char *filter);
 int trace_event_add_trigger(struct trace_events *event, char *trigger);
-int trace_is_off(struct trace_instance *tool, struct trace_instance *trace);
 int trace_set_buffer_size(struct trace_instance *trace, int size);