xref: /linux/tools/lib/api/fs/tracing_path.c (revision 592d5a6ba86a31681fa5e20a63a145b0a3b53c8a)
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 }
84