From: "Steven Rostedt (Google)" <rostedt@xxxxxxxxxxx> When tracefs_local_events() (which also uses tracefs_local_events_system()) is called, it does not set the CPU count for the tep handler. It should do so, so make that happen. Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> --- This is added on top of: https://lore.kernel.org/all/20220722142803.24919c8a@xxxxxxxxxxxxxxxxxx/ src/tracefs-events.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/tracefs-events.c b/src/tracefs-events.c index 86395101c96a..9dbeeac938b4 100644 --- a/src/tracefs-events.c +++ b/src/tracefs-events.c @@ -945,6 +945,33 @@ out: return ret; } +static void set_tep_cpus(const char *tracing_dir, struct tep_handle *tep) +{ + struct stat st; + char path[PATH_MAX]; + int cpus = sysconf(_SC_NPROCESSORS_CONF); + int max_cpu = 0; + int ret; + int i; + + if (!tracing_dir) + tracing_dir = tracefs_tracing_dir(); + + for (i = 0; !cpus || i < cpus; i++) { + snprintf(path, PATH_MAX, "%s/per_cpu/cpu%d", tracing_dir, i); + ret = stat(path, &st); + if (!ret && S_ISDIR(st.st_mode)) + max_cpu = i + 1; + else if (i >= cpus) + break; + } + + if (!max_cpu) + max_cpu = cpus; + + tep_set_cpus(tep, max_cpu); +} + /** * tracefs_local_events_system - create a tep from the events of the specified subsystem. * @@ -969,6 +996,8 @@ struct tep_handle *tracefs_local_events_system(const char *tracing_dir, tep = NULL; } + set_tep_cpus(tracing_dir, tep); + /* Set the long size for this tep handle */ tep_set_long_size(tep, tep_get_header_page_size(tep)); -- 2.35.1