mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 03:59:04 -04:00
tools/rtla: Add osnoise_trace_is_off()
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>
This commit is contained in:
committed by
Steven Rostedt (Google)
parent
217f0b1e99
commit
b91cfd9f75
@@ -1079,6 +1079,22 @@ struct osnoise_tool *osnoise_init_trace_tool(char *tracer)
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user