Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+21 -5
+13
tools/lib/api/fs/tracing_path.c
··· 101 101 free(file); 102 102 } 103 103 104 + DIR *tracing_events__opendir(void) 105 + { 106 + DIR *dir = NULL; 107 + char *path = get_tracing_file("events"); 108 + 109 + if (path) { 110 + dir = opendir(path); 111 + put_events_file(path); 112 + } 113 + 114 + return dir; 115 + } 116 + 104 117 int tracing_path__strerror_open_tp(int err, char *buf, size_t size, 105 118 const char *sys, const char *name) 106 119 {
+3
tools/lib/api/fs/tracing_path.h
··· 3 3 #define __API_FS_TRACING_PATH_H 4 4 5 5 #include <linux/types.h> 6 + #include <dirent.h> 6 7 7 8 extern char tracing_events_path[]; 9 + 10 + DIR *tracing_events__opendir(void); 8 11 9 12 void tracing_path_set(const char *mountpoint); 10 13 const char *tracing_path_mount(void);
+1 -1
tools/perf/tests/parse-events.c
··· 1323 1323 DIR *events_dir; 1324 1324 int cnt = 0; 1325 1325 1326 - events_dir = opendir(tracing_events_path); 1326 + events_dir = tracing_events__opendir(); 1327 1327 1328 1328 TEST_ASSERT_VAL("Can't open events dir", events_dir); 1329 1329
+4 -4
tools/perf/util/parse-events.c
··· 191 191 char evt_path[MAXPATHLEN]; 192 192 char *dir_path; 193 193 194 - sys_dir = opendir(tracing_events_path); 194 + sys_dir = tracing_events__opendir(); 195 195 if (!sys_dir) 196 196 return NULL; 197 197 ··· 578 578 DIR *events_dir; 579 579 int ret = 0; 580 580 581 - events_dir = opendir(tracing_events_path); 581 + events_dir = tracing_events__opendir(); 582 582 if (!events_dir) { 583 583 tracepoint_error(err, errno, sys_name, evt_name); 584 584 return -1; ··· 2106 2106 bool evt_num_known = false; 2107 2107 2108 2108 restart: 2109 - sys_dir = opendir(tracing_events_path); 2109 + sys_dir = tracing_events__opendir(); 2110 2110 if (!sys_dir) 2111 2111 return; 2112 2112 ··· 2200 2200 char evt_path[MAXPATHLEN]; 2201 2201 char *dir_path; 2202 2202 2203 - sys_dir = opendir(tracing_events_path); 2203 + sys_dir = tracing_events__opendir(); 2204 2204 if (!sys_dir) 2205 2205 return 0; 2206 2206