Commit 7014e0e3 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 25a7d914
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -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 −0
Original line number Original line Diff line number Diff line
@@ -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);


+1 −1
Original line number Original line Diff line number Diff line
@@ -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);


+4 −4
Original line number Original line Diff line number Diff line
@@ -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,
	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,
	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)
	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;