summarylogtreecommitdiffstats
path: root/tracing.patch
blob: 076dfbb2c669b69acccf9dd10d6a47afb0280e0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
diff --git a/ras-events.c b/ras-events.c
index 60504ac..8373c09 100644
--- a/ras-events.c
+++ b/ras-events.c
@@ -65,7 +65,7 @@ static const struct event_trigger event_triggers[] = {
 #endif
 };
 
-static int get_debugfs_dir(char *tracing_dir, size_t len)
+static int get_mountdir_by_type(char *mount_type, char *tracing_dir, size_t len)
 {
 	FILE *fp;
 	char line[MAX_PATH + 1 + 256];
@@ -93,7 +93,7 @@ static int get_debugfs_dir(char *tracing_dir, size_t len)
 		if (!type)
 			break;
 
-		if (!strcmp(type, "debugfs")) {
+		if (!strcmp(type, mount_type)) {
 			fclose(fp);
 			strscpy(tracing_dir, dir, len - 1);
 			return 0;
@@ -101,10 +101,21 @@ static int get_debugfs_dir(char *tracing_dir, size_t len)
 	} while (1);
 
 	fclose(fp);
-	log(ALL, LOG_INFO, "Can't find debugfs\n");
+	log(ALL, LOG_INFO, "Can't find mountdir for type: %s\n", mount_type);
 	return -ENOENT;
 }
 
+static int get_debugfs_dir(char *tracing_dir, size_t len)
+{
+	return get_mountdir_by_type("debugfs", tracing_dir, len);
+}
+
+
+static int get_tracefs_dir(char *tracing_dir, size_t len)
+{
+	return get_mountdir_by_type("tracefs", tracing_dir, len);
+}
+
 static int wait_access(char *path, int ms)
 {
 	int i;
@@ -154,18 +165,26 @@ static int open_trace(struct ras_events *ras, char *name, int flags)
 static int get_tracing_dir(struct ras_events *ras)
 {
 	char		fname[MAX_PATH + 1];
+	char		debugfs[MAX_PATH + 1];
 	int		rc, has_instances = 0;
 	DIR		*dir;
 	struct dirent	*entry;
 
-	get_debugfs_dir(ras->debugfs, sizeof(ras->debugfs));
-
-	rc = strscpy(fname, ras->debugfs, sizeof(fname));
+	rc = get_tracefs_dir(fname, sizeof(fname));
 	if (rc < 0)
-		return rc;
-	rc = strscat(fname, "/tracing", sizeof(fname));
-	if (rc < 0)
-		return rc;
+	{
+		/* check under deprecated debugfs location */
+		rc = get_debugfs_dir(debugfs, sizeof(debugfs));
+		if (rc < 0)
+			return rc;
+
+		rc = strscpy(fname, debugfs, sizeof(fname));
+		if (rc < 0)
+			return rc;
+		rc = strscat(fname, "/tracing", sizeof(fname));
+		if (rc < 0)
+			return rc;
+	}
 
 	dir = opendir(fname);
 	if (!dir)
@@ -179,8 +198,7 @@ static int get_tracing_dir(struct ras_events *ras)
 	}
 	closedir(dir);
 
-	strscpy(ras->tracing, ras->debugfs, sizeof(ras->tracing));
-	strscat(ras->tracing, "/tracing", sizeof(ras->tracing));
+	strscpy(ras->tracing, fname, sizeof(ras->tracing));
 	if (has_instances) {
 		rc = strscat(ras->tracing, "/instances/" TOOL_NAME,
 			     sizeof(ras->tracing));
@@ -836,8 +854,8 @@ static bool check_event_exist(struct ras_events *ras, char *group, char *event)
 {
 	char fname[MAX_PATH + 256];
 
-	snprintf(fname, sizeof(fname), "%s/tracing/events/%s/%s",
-		 ras->debugfs, group, event);
+	snprintf(fname, sizeof(fname), "%s/events/%s/%s",
+		 ras->tracing, group, event);
 	if (access(fname, F_OK) == 0)
 		return true;
 
diff --git a/ras-events.h b/ras-events.h
index e694157..5fa7cb9 100644
--- a/ras-events.h
+++ b/ras-events.h
@@ -41,7 +41,6 @@ enum {
 };
 
 struct ras_events {
-	char debugfs[MAX_PATH + 1];
 	char tracing[MAX_PATH + 1];
 	struct tep_handle *pevent;
 	int page_size;