tools lib api fs tracing_path: Introduce opendir() method

That takes care of using the right call to get the tracing_path
directory, the one that will end up calling tracing_path_set() to figure
out where tracefs is mounted.

One more step in doing just lazy reading of system structures to reduce
the number of operations done unconditionaly at 'perf' start.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-42zzi0f274909bg9mxzl81bu@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 25a7d914
...@@ -101,6 +101,19 @@ void put_events_file(char *file) ...@@ -101,6 +101,19 @@ void put_events_file(char *file)
free(file); free(file);
} }
DIR *tracing_events__opendir(void)
{
DIR *dir = NULL;
char *path = get_tracing_file("events");
if (path) {
dir = opendir(path);
put_events_file(path);
}
return dir;
}
int tracing_path__strerror_open_tp(int err, char *buf, size_t size, int tracing_path__strerror_open_tp(int err, char *buf, size_t size,
const char *sys, const char *name) const char *sys, const char *name)
{ {
......
...@@ -3,9 +3,12 @@ ...@@ -3,9 +3,12 @@
#define __API_FS_TRACING_PATH_H #define __API_FS_TRACING_PATH_H
#include <linux/types.h> #include <linux/types.h>
#include <dirent.h>
extern char tracing_events_path[]; extern char tracing_events_path[];
DIR *tracing_events__opendir(void);
void tracing_path_set(const char *mountpoint); void tracing_path_set(const char *mountpoint);
const char *tracing_path_mount(void); const char *tracing_path_mount(void);
......
...@@ -1323,7 +1323,7 @@ static int count_tracepoints(void) ...@@ -1323,7 +1323,7 @@ static int count_tracepoints(void)
DIR *events_dir; DIR *events_dir;
int cnt = 0; int cnt = 0;
events_dir = opendir(tracing_events_path); events_dir = tracing_events__opendir();
TEST_ASSERT_VAL("Can't open events dir", events_dir); TEST_ASSERT_VAL("Can't open events dir", events_dir);
......
...@@ -191,7 +191,7 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config) ...@@ -191,7 +191,7 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
char evt_path[MAXPATHLEN]; char evt_path[MAXPATHLEN];
char *dir_path; char *dir_path;
sys_dir = opendir(tracing_events_path); sys_dir = tracing_events__opendir();
if (!sys_dir) if (!sys_dir)
return NULL; return NULL;
...@@ -578,7 +578,7 @@ static int add_tracepoint_multi_sys(struct list_head *list, int *idx, ...@@ -578,7 +578,7 @@ static int add_tracepoint_multi_sys(struct list_head *list, int *idx,
DIR *events_dir; DIR *events_dir;
int ret = 0; int ret = 0;
events_dir = opendir(tracing_events_path); events_dir = tracing_events__opendir();
if (!events_dir) { if (!events_dir) {
tracepoint_error(err, errno, sys_name, evt_name); tracepoint_error(err, errno, sys_name, evt_name);
return -1; return -1;
...@@ -2106,7 +2106,7 @@ void print_tracepoint_events(const char *subsys_glob, const char *event_glob, ...@@ -2106,7 +2106,7 @@ void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
bool evt_num_known = false; bool evt_num_known = false;
restart: restart:
sys_dir = opendir(tracing_events_path); sys_dir = tracing_events__opendir();
if (!sys_dir) if (!sys_dir)
return; return;
...@@ -2200,7 +2200,7 @@ int is_valid_tracepoint(const char *event_string) ...@@ -2200,7 +2200,7 @@ int is_valid_tracepoint(const char *event_string)
char evt_path[MAXPATHLEN]; char evt_path[MAXPATHLEN];
char *dir_path; char *dir_path;
sys_dir = opendir(tracing_events_path); sys_dir = tracing_events__opendir();
if (!sys_dir) if (!sys_dir)
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册