#include "util/cache.h"
 #include "util/debug.h"
+#include "util/debugfs.h"
 #include "util/evlist.h"
 #include "util/parse-options.h"
 #include "util/parse-events.h"
 
        if (asprintf(&filename,
                     "%s/syscalls/%s/id",
-                    debugfs_path, evname) < 0)
+                    tracing_events_path, evname) < 0)
                return -1;
 
        fd = open(filename, O_RDONLY);
 
        int val;
 };
 
-static char debugfs_mntpt[MAXPATHLEN];
-
 static int pager_command_config(const char *var, const char *value, void *data)
 {
        struct pager_config *c = data;
        }
 }
 
-static void set_debugfs_path(void)
-{
-       char *path;
-
-       path = getenv(PERF_DEBUGFS_ENVIRONMENT);
-       snprintf(debugfs_path, MAXPATHLEN, "%s/%s", path ?: debugfs_mntpt,
-                "tracing/events");
-}
-
 static int handle_options(const char ***argv, int *argc, int *envchanged)
 {
        int handled = 0;
                                fprintf(stderr, "No directory given for --debugfs-dir.\n");
                                usage(perf_usage_string);
                        }
-                       strncpy(debugfs_mntpt, (*argv)[1], MAXPATHLEN);
-                       debugfs_mntpt[MAXPATHLEN - 1] = '\0';
+                       debugfs_set_path((*argv)[1]);
                        if (envchanged)
                                *envchanged = 1;
                        (*argv)++;
                        (*argc)--;
                } else if (!prefixcmp(cmd, CMD_DEBUGFS_DIR)) {
-                       strncpy(debugfs_mntpt, cmd + strlen(CMD_DEBUGFS_DIR), MAXPATHLEN);
-                       debugfs_mntpt[MAXPATHLEN - 1] = '\0';
+                       debugfs_set_path(cmd + strlen(CMD_DEBUGFS_DIR));
+                       fprintf(stderr, "dir: %s\n", debugfs_mountpoint);
                        if (envchanged)
                                *envchanged = 1;
                } else {
        if (use_pager == -1 && p->option & USE_PAGER)
                use_pager = 1;
        commit_pager_choice();
-       set_debugfs_path();
 
        status = p->fn(argc, argv, prefix);
        exit_browser(status);
        return done_alias;
 }
 
-/* mini /proc/mounts parser: searching for "^blah /mount/point debugfs" */
-static void get_debugfs_mntpt(void)
-{
-       const char *path = debugfs_mount(NULL);
-
-       if (path)
-               strncpy(debugfs_mntpt, path, sizeof(debugfs_mntpt));
-       else
-               debugfs_mntpt[0] = '\0';
-}
-
 static void pthread__block_sigwinch(void)
 {
        sigset_t set;
        if (!cmd)
                cmd = "perf-help";
        /* get debugfs mount point from /proc/mounts */
-       get_debugfs_mntpt();
+       debugfs_mount(NULL);
        /*
         * "perf-xxxx" is the same as "perf xxxx", but we obviously:
         *
        argc--;
        handle_options(&argv, &argc, NULL);
        commit_pager_choice();
-       set_debugfs_path();
        set_buildid_dir();
 
        if (argc > 0) {
 
 #include "debugfs.h"
 #include "cache.h"
 
+#include <linux/kernel.h>
 #include <sys/mount.h>
 
 static int debugfs_premounted;
-static char debugfs_mountpoint[PATH_MAX + 1];
+char debugfs_mountpoint[PATH_MAX + 1] = "/sys/kernel/debug";
+char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
 
 static const char *debugfs_known_mountpoints[] = {
        "/sys/kernel/debug/",
        /* give up and parse /proc/mounts */
        fp = fopen("/proc/mounts", "r");
        if (fp == NULL)
-               die("Can't open /proc/mounts for read");
+               return NULL;
 
        while (fscanf(fp, "%*s %" STR(PATH_MAX) "s %99s %*s %*d %*d\n",
                      debugfs_mountpoint, type) == 2) {
        return 0;
 }
 
+static void debugfs_set_tracing_events_path(const char *mountpoint)
+{
+       snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s",
+                mountpoint, "tracing/events");
+}
+
 /* mount the debugfs somewhere if it's not mounted */
 
 char *debugfs_mount(const char *mountpoint)
        /* see if it's already mounted */
        if (debugfs_find_mountpoint()) {
                debugfs_premounted = 1;
-               return debugfs_mountpoint;
+               goto out;
        }
 
        /* if not mounted and no argument */
                return NULL;
 
        /* save the mountpoint */
-       strncpy(debugfs_mountpoint, mountpoint, sizeof(debugfs_mountpoint));
        debugfs_found = 1;
-
+       strncpy(debugfs_mountpoint, mountpoint, sizeof(debugfs_mountpoint));
+out:
+       debugfs_set_tracing_events_path(debugfs_mountpoint);
        return debugfs_mountpoint;
 }
 
+void debugfs_set_path(const char *mountpoint)
+{
+       snprintf(debugfs_mountpoint, sizeof(debugfs_mountpoint), "%s", mountpoint);
+       debugfs_set_tracing_events_path(mountpoint);
+}
+
 /* umount the debugfs */
 
 int debugfs_umount(void)
 
 int debugfs_valid_entry(const char *path);
 char *debugfs_mount(const char *mountpoint);
 int debugfs_umount(void);
+void debugfs_set_path(const char *mountpoint);
 int debugfs_write(const char *entry, const char *value);
 int debugfs_read(const char *entry, char *buffer, size_t size);
 void debugfs_force_cleanup(void);
 int debugfs_make_path(const char *element, char *buffer, int size);
 
+extern char debugfs_mountpoint[];
+extern char tracing_events_path[];
+
 #endif /* __DEBUGFS_H__ */
 
        EVT_HANDLED_ALL
 };
 
-char debugfs_path[MAXPATHLEN];
-
 #define CHW(x) .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_##x
 #define CSW(x) .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_##x
 
        char evt_path[MAXPATHLEN];
        int fd;
 
-       snprintf(evt_path, MAXPATHLEN, "%s/%s/%s/id", debugfs_path,
+       snprintf(evt_path, MAXPATHLEN, "%s/%s/%s/id", tracing_events_path,
                        sys_dir->d_name, evt_dir->d_name);
        fd = open(evt_path, O_RDONLY);
        if (fd < 0)
        char evt_path[MAXPATHLEN];
        char dir_path[MAXPATHLEN];
 
-       if (debugfs_valid_mountpoint(debugfs_path))
+       if (debugfs_valid_mountpoint(tracing_events_path))
                return NULL;
 
-       sys_dir = opendir(debugfs_path);
+       sys_dir = opendir(tracing_events_path);
        if (!sys_dir)
                return NULL;
 
        for_each_subsystem(sys_dir, sys_dirent, sys_next) {
 
-               snprintf(dir_path, MAXPATHLEN, "%s/%s", debugfs_path,
+               snprintf(dir_path, MAXPATHLEN, "%s/%s", tracing_events_path,
                         sys_dirent.d_name);
                evt_dir = opendir(dir_path);
                if (!evt_dir)
        u64 id;
        int fd;
 
-       snprintf(evt_path, MAXPATHLEN, "%s/%s/%s/id", debugfs_path,
+       snprintf(evt_path, MAXPATHLEN, "%s/%s/%s/id", tracing_events_path,
                 sys_name, evt_name);
 
        fd = open(evt_path, O_RDONLY);
        struct dirent *evt_ent;
        DIR *evt_dir;
 
-       snprintf(evt_path, MAXPATHLEN, "%s/%s", debugfs_path, sys_name);
+       snprintf(evt_path, MAXPATHLEN, "%s/%s", tracing_events_path, sys_name);
        evt_dir = opendir(evt_path);
 
        if (!evt_dir) {
        char sys_name[MAX_EVENT_LENGTH];
        unsigned int sys_length, evt_length;
 
-       if (debugfs_valid_mountpoint(debugfs_path))
+       if (debugfs_valid_mountpoint(tracing_events_path))
                return 0;
 
        evt_name = strchr(*strp, ':');
        char evt_path[MAXPATHLEN];
        char dir_path[MAXPATHLEN];
 
-       if (debugfs_valid_mountpoint(debugfs_path))
+       if (debugfs_valid_mountpoint(tracing_events_path))
                return;
 
-       sys_dir = opendir(debugfs_path);
+       sys_dir = opendir(tracing_events_path);
        if (!sys_dir)
                return;
 
                    !strglobmatch(sys_dirent.d_name, subsys_glob))
                        continue;
 
-               snprintf(dir_path, MAXPATHLEN, "%s/%s", debugfs_path,
+               snprintf(dir_path, MAXPATHLEN, "%s/%s", tracing_events_path,
                         sys_dirent.d_name);
                evt_dir = opendir(dir_path);
                if (!evt_dir)
        char evt_path[MAXPATHLEN];
        char dir_path[MAXPATHLEN];
 
-       if (debugfs_valid_mountpoint(debugfs_path))
+       if (debugfs_valid_mountpoint(tracing_events_path))
                return 0;
 
-       sys_dir = opendir(debugfs_path);
+       sys_dir = opendir(tracing_events_path);
        if (!sys_dir)
                return 0;
 
        for_each_subsystem(sys_dir, sys_dirent, sys_next) {
 
-               snprintf(dir_path, MAXPATHLEN, "%s/%s", debugfs_path,
+               snprintf(dir_path, MAXPATHLEN, "%s/%s", tracing_events_path,
                         sys_dirent.d_name);
                evt_dir = opendir(dir_path);
                if (!evt_dir)
 
 int print_hwcache_events(const char *event_glob);
 extern int is_valid_tracepoint(const char *event_string);
 
-extern char debugfs_path[];
 extern int valid_debugfs_mount(const char *debugfs);
 
 #endif /* __PERF_PARSE_EVENTS_H */