Skip to content

Commit

Permalink
tools lib api fs: Add tracefs mount helper functions
Browse files Browse the repository at this point in the history
Since tracefs will now hold the event directory for perf, and even
though by default, debugfs still mounts tracefs on the debugfs/tracing
directory, the system admin may now choose to not mount debugfs and
instead just mount tracefs instead.

Having tracefs helper functions will facilitate having perf look for
tracefs first, and then try debugfs as a fallback.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20150202193552.898934751@goodmis.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Steven Rostedt (Red Hat) authored and Arnaldo Carvalho de Melo committed Feb 7, 2015
1 parent cde164a commit 4ef92c2
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 0 deletions.
2 changes: 2 additions & 0 deletions tools/lib/api/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ LIB_H=
LIB_OBJS=

LIB_H += fs/debugfs.h
LIB_H += fs/tracefs.h
LIB_H += fs/findfs.h
LIB_H += fs/fs.h
# See comment below about piggybacking...
LIB_H += fd/array.h

LIB_OBJS += $(OUTPUT)fs/debugfs.o
LIB_OBJS += $(OUTPUT)fs/tracefs.o
LIB_OBJS += $(OUTPUT)fs/findfs.o
LIB_OBJS += $(OUTPUT)fs/fs.o
# XXX piggybacking here, need to introduce libapikfd, or rename this
Expand Down
70 changes: 70 additions & 0 deletions tools/lib/api/fs/tracefs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <sys/vfs.h>
#include <sys/mount.h>
#include <linux/kernel.h>

#include "tracefs.h"

#ifndef TRACEFS_DEFAULT_PATH
#define TRACEFS_DEFAULT_PATH "/sys/kernel/tracing"
#endif

char tracefs_mountpoint[PATH_MAX + 1] = TRACEFS_DEFAULT_PATH;

static const char * const tracefs_known_mountpoints[] = {
TRACEFS_DEFAULT_PATH,
"/sys/kernel/debug/tracing",
"/tracing",
"/trace",
0,
};

static bool tracefs_found;

/* find the path to the mounted tracefs */
const char *tracefs_find_mountpoint(void)
{
const char *ret;

if (tracefs_found)
return (const char *)tracefs_mountpoint;

ret = find_mountpoint("tracefs", (long) TRACEFS_MAGIC,
tracefs_mountpoint, PATH_MAX + 1,
tracefs_known_mountpoints);

if (ret)
tracefs_found = true;

return ret;
}

/* mount the tracefs somewhere if it's not mounted */
char *tracefs_mount(const char *mountpoint)
{
/* see if it's already mounted */
if (tracefs_find_mountpoint())
goto out;

/* if not mounted and no argument */
if (mountpoint == NULL) {
/* see if environment variable set */
mountpoint = getenv(PERF_TRACEFS_ENVIRONMENT);
/* if no environment variable, use default */
if (mountpoint == NULL)
mountpoint = TRACEFS_DEFAULT_PATH;
}

if (mount(NULL, mountpoint, "tracefs", 0, NULL) < 0)
return NULL;

/* save the mountpoint */
tracefs_found = true;
strncpy(tracefs_mountpoint, mountpoint, sizeof(tracefs_mountpoint));
out:
return tracefs_mountpoint;
}
20 changes: 20 additions & 0 deletions tools/lib/api/fs/tracefs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef __API_TRACEFS_H__
#define __API_TRACEFS_H__

#include "findfs.h"

#ifndef TRACEFS_MAGIC
#define TRACEFS_MAGIC 0x74726163
#endif

#ifndef PERF_TRACEFS_ENVIRONMENT
#define PERF_TRACEFS_ENVIRONMENT "PERF_TRACEFS_DIR"
#endif

const char *tracefs_find_mountpoint(void);
int tracefs_valid_mountpoint(const char *debugfs);
char *tracefs_mount(const char *mountpoint);

extern char tracefs_mountpoint[];

#endif /* __API_DEBUGFS_H__ */

0 comments on commit 4ef92c2

Please sign in to comment.