IPIs can now be monitored and accounted by osnoise top. When that is
the case, also record them when saving a trace file.

Signed-off-by: Valentin Schneider <[email protected]>
---
 tools/tracing/rtla/src/common.c  |  2 +-
 tools/tracing/rtla/src/common.h  |  2 +-
 tools/tracing/rtla/src/osnoise.c | 17 ++++++++++++++++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/tools/tracing/rtla/src/common.c b/tools/tracing/rtla/src/common.c
index d0a8a6edbf0cb..dd302427557ca 100644
--- a/tools/tracing/rtla/src/common.c
+++ b/tools/tracing/rtla/src/common.c
@@ -204,7 +204,7 @@ int run_tool(struct tool_ops *ops, int argc, char *argv[])
 
        if (params->threshold_actions.present[ACTION_TRACE_OUTPUT] ||
            params->end_actions.present[ACTION_TRACE_OUTPUT]) {
-               tool->record = osnoise_init_trace_tool(ops->tracer);
+               tool->record = osnoise_init_trace_tool(params, ops->tracer);
                if (!tool->record) {
                        err_msg("Failed to enable the trace instance\n");
                        goto out_free;
diff --git a/tools/tracing/rtla/src/common.h b/tools/tracing/rtla/src/common.h
index 045253230fcf2..421e06e10f3f1 100644
--- a/tools/tracing/rtla/src/common.h
+++ b/tools/tracing/rtla/src/common.h
@@ -178,7 +178,7 @@ int osnoise_set_workload(struct osnoise_context *context, 
bool onoff);
 
 void osnoise_destroy_tool(struct osnoise_tool *top);
 struct osnoise_tool *osnoise_init_tool(char *tool_name);
-struct osnoise_tool *osnoise_init_trace_tool(const char *tracer);
+struct osnoise_tool *osnoise_init_trace_tool(struct common_params *params, 
const char *tracer);
 bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool 
*record);
 int osnoise_set_stop_us(struct osnoise_context *context, long long stop_us);
 int osnoise_set_stop_total_us(struct osnoise_context *context,
diff --git a/tools/tracing/rtla/src/osnoise.c b/tools/tracing/rtla/src/osnoise.c
index 4ff5dad013b10..281f6f57d15af 100644
--- a/tools/tracing/rtla/src/osnoise.c
+++ b/tools/tracing/rtla/src/osnoise.c
@@ -1181,7 +1181,8 @@ struct osnoise_tool *osnoise_init_tool(char *tool_name)
 /*
  * osnoise_init_trace_tool - init a tracer instance to trace osnoise events
  */
-struct osnoise_tool *osnoise_init_trace_tool(const char *tracer)
+struct osnoise_tool *osnoise_init_trace_tool(struct common_params *params,
+                                            const char *tracer)
 {
        struct osnoise_tool *trace;
        int retval;
@@ -1196,6 +1197,20 @@ struct osnoise_tool *osnoise_init_trace_tool(const char 
*tracer)
                goto out_err;
        }
 
+       if (params->ipi) {
+               retval = tracefs_event_enable(trace->trace.inst, "ipi", 
"ipi_send_cpu");
+               if (retval < 0 && !errno) {
+                       err_msg("Could not find ipi_send_cpu event\n");
+                       goto out_err;
+               }
+
+               retval = tracefs_event_enable(trace->trace.inst, "ipi", 
"ipi_send_cpumask");
+               if (retval < 0 && !errno) {
+                       err_msg("Could not find ipi_send_cpumask event\n");
+                       goto out_err;
+               }
+       }
+
        retval = enable_tracer_by_name(trace->trace.inst, tracer);
        if (retval) {
                err_msg("Could not enable %s tracer for tracing\n", tracer);
-- 
2.54.0


Reply via email to