diff options
Diffstat (limited to 'tools/lib/api/fs/tracing_path.c')
-rw-r--r-- | tools/lib/api/fs/tracing_path.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tools/lib/api/fs/tracing_path.c b/tools/lib/api/fs/tracing_path.c new file mode 100644 index 000000000000..1fd6e1f99234 --- /dev/null +++ b/tools/lib/api/fs/tracing_path.c | |||
@@ -0,0 +1,83 @@ | |||
1 | #ifndef _GNU_SOURCE | ||
2 | # define _GNU_SOURCE | ||
3 | #endif | ||
4 | |||
5 | #include <stdio.h> | ||
6 | #include <stdlib.h> | ||
7 | #include <string.h> | ||
8 | #include "debugfs.h" | ||
9 | #include "tracefs.h" | ||
10 | |||
11 | #include "tracing_path.h" | ||
12 | |||
13 | |||
14 | char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing"; | ||
15 | char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events"; | ||
16 | |||
17 | |||
18 | static void __tracing_path_set(const char *tracing, const char *mountpoint) | ||
19 | { | ||
20 | snprintf(tracing_path, sizeof(tracing_path), "%s/%s", | ||
21 | mountpoint, tracing); | ||
22 | snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s", | ||
23 | mountpoint, tracing, "events"); | ||
24 | } | ||
25 | |||
26 | static const char *tracing_path_tracefs_mount(void) | ||
27 | { | ||
28 | const char *mnt; | ||
29 | |||
30 | mnt = tracefs_mount(NULL); | ||
31 | if (!mnt) | ||
32 | return NULL; | ||
33 | |||
34 | __tracing_path_set("", mnt); | ||
35 | |||
36 | return mnt; | ||
37 | } | ||
38 | |||
39 | static const char *tracing_path_debugfs_mount(void) | ||
40 | { | ||
41 | const char *mnt; | ||
42 | |||
43 | mnt = debugfs_mount(NULL); | ||
44 | if (!mnt) | ||
45 | return NULL; | ||
46 | |||
47 | __tracing_path_set("tracing/", mnt); | ||
48 | |||
49 | return mnt; | ||
50 | } | ||
51 | |||
52 | const char *tracing_path_mount(void) | ||
53 | { | ||
54 | const char *mnt; | ||
55 | |||
56 | mnt = tracing_path_tracefs_mount(); | ||
57 | if (mnt) | ||
58 | return mnt; | ||
59 | |||
60 | mnt = tracing_path_debugfs_mount(); | ||
61 | |||
62 | return mnt; | ||
63 | } | ||
64 | |||
65 | void tracing_path_set(const char *mntpt) | ||
66 | { | ||
67 | __tracing_path_set("tracing/", mntpt); | ||
68 | } | ||
69 | |||
70 | char *get_tracing_file(const char *name) | ||
71 | { | ||
72 | char *file; | ||
73 | |||
74 | if (asprintf(&file, "%s/%s", tracing_path, name) < 0) | ||
75 | return NULL; | ||
76 | |||
77 | return file; | ||
78 | } | ||
79 | |||
80 | void put_tracing_file(char *file) | ||
81 | { | ||
82 | free(file); | ||
83 | } | ||