lkml.org 
[lkml]   [2015]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] tools lib api fs: Add tracefs mount helper functions
    Commit-ID:  4ef92c2ecd96ebad171e554020c83ce9fdb343ae
    Gitweb: http://git.kernel.org/tip/4ef92c2ecd96ebad171e554020c83ce9fdb343ae
    Author: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
    AuthorDate: Mon, 2 Feb 2015 14:35:04 -0500
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Sat, 7 Feb 2015 13:55:20 +0100

    tools lib api fs: Add tracefs mount helper functions

    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>
    ---
    tools/lib/api/Makefile | 2 ++
    tools/lib/api/fs/tracefs.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++
    tools/lib/api/fs/tracefs.h | 20 +++++++++++++
    3 files changed, 92 insertions(+)

    diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
    index 22b2f15..212aa4f 100644
    --- a/tools/lib/api/Makefile
    +++ b/tools/lib/api/Makefile
    @@ -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
    diff --git a/tools/lib/api/fs/tracefs.c b/tools/lib/api/fs/tracefs.c
    new file mode 100644
    index 0000000..ef40d15
    --- /dev/null
    +++ b/tools/lib/api/fs/tracefs.c
    @@ -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;
    +}
    diff --git a/tools/lib/api/fs/tracefs.h b/tools/lib/api/fs/tracefs.h
    new file mode 100644
    index 0000000..e6f7f51
    --- /dev/null
    +++ b/tools/lib/api/fs/tracefs.h
    @@ -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__ */

    \
     
     \ /
      Last update: 2015-02-18 19:41    [W:6.772 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site