perf list: Give clues if failed to open tracing events directory
When executing the command "perf list", I met "Error: failed to open tracing events directory" twice, the first reason is that there is no "/sys/kernel/tracing/events" directory due to it does not enable the kernel tracing infrastructure with CONFIG_FTRACE, the second reason is that there is no root privileges. Add the error string to tell the users what happened and what should to do, and also call put_tracing_file() to free events_path a little later to avoid messy code in the error message. At the same time, just remove the redundant "/" of the file path in the function get_tracing_file(), otherwise it shows something like "/sys/kernel/tracing//events". Before: $ ./perf list Error: failed to open tracing events directory After: (1) Without CONFIG_FTRACE $ ./perf list Error: failed to open tracing events directory /sys/kernel/tracing/events: No such file or directory (2) With CONFIG_FTRACE but no root privileges $ ./perf list Error: failed to open tracing events directory /sys/kernel/tracing/events: Permission denied Committer testing: Redirect stdout to null to quickly test the patch: Before: $ perf list > /dev/null Error: failed to open tracing events directory $ After: $ perf list > /dev/null Error: failed to open tracing events directory /sys/kernel/tracing/events: Permission denied $ Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/lkml/20240730062301.23244-3-yangtiezhu@loongson.cn Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
839b1832e6
commit
b48543c451
@ -69,7 +69,7 @@ char *get_tracing_file(const char *name)
|
||||
{
|
||||
char *file;
|
||||
|
||||
if (asprintf(&file, "%s/%s", tracing_path_mount(), name) < 0)
|
||||
if (asprintf(&file, "%s%s", tracing_path_mount(), name) < 0)
|
||||
return NULL;
|
||||
|
||||
return file;
|
||||
|
@ -68,11 +68,12 @@ void print_tracepoint_events(const struct print_callbacks *print_cb __maybe_unus
|
||||
struct dirent **sys_namelist = NULL;
|
||||
int sys_items;
|
||||
|
||||
put_tracing_file(events_path);
|
||||
if (events_fd < 0) {
|
||||
pr_err("Error: failed to open tracing events directory\n");
|
||||
pr_err("%s: %s\n", events_path, strerror(errno));
|
||||
return;
|
||||
}
|
||||
put_tracing_file(events_path);
|
||||
|
||||
sys_items = tracing_events__scandir_alphasort(&sys_namelist);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user