lkml.org 
[lkml]   [2012]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/9] perf, tool: Add sysfs mountpoint interface
    Date
    Adding sysfs object to provide sysfs mount information
    in the same way as debugfs object does.

    The object provides following function:
    sysfs_find_mountpoint

    which returns the sysfs mount point.

    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    ---
    tools/perf/Makefile | 2 +
    tools/perf/util/sysfs.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++
    tools/perf/util/sysfs.h | 6 ++++
    3 files changed, 68 insertions(+), 0 deletions(-)
    create mode 100644 tools/perf/util/sysfs.c
    create mode 100644 tools/perf/util/sysfs.h

    diff --git a/tools/perf/Makefile b/tools/perf/Makefile
    index ac86d67..41daa92 100644
    --- a/tools/perf/Makefile
    +++ b/tools/perf/Makefile
    @@ -259,6 +259,7 @@ LIB_H += util/callchain.h
    LIB_H += util/build-id.h
    LIB_H += util/debug.h
    LIB_H += util/debugfs.h
    +LIB_H += util/sysfs.h
    LIB_H += util/event.h
    LIB_H += util/evsel.h
    LIB_H += util/evlist.h
    @@ -305,6 +306,7 @@ LIB_OBJS += $(OUTPUT)util/build-id.o
    LIB_OBJS += $(OUTPUT)util/config.o
    LIB_OBJS += $(OUTPUT)util/ctype.o
    LIB_OBJS += $(OUTPUT)util/debugfs.o
    +LIB_OBJS += $(OUTPUT)util/sysfs.o
    LIB_OBJS += $(OUTPUT)util/environment.o
    LIB_OBJS += $(OUTPUT)util/event.o
    LIB_OBJS += $(OUTPUT)util/evlist.o
    diff --git a/tools/perf/util/sysfs.c b/tools/perf/util/sysfs.c
    new file mode 100644
    index 0000000..0368bba
    --- /dev/null
    +++ b/tools/perf/util/sysfs.c
    @@ -0,0 +1,60 @@
    +
    +#include "util.h"
    +#include "sysfs.h"
    +
    +static const char *sysfs_known_mountpoints[] = {
    + "/sys",
    + 0,
    +};
    +
    +static int sysfs_found;
    +char sysfs_mountpoint[PATH_MAX];
    +
    +static int sysfs_valid_mountpoint(const char *sysfs)
    +{
    + struct statfs st_fs;
    +
    + if (statfs(sysfs, &st_fs) < 0)
    + return -ENOENT;
    + else if (st_fs.f_type != (long) SYSFS_MAGIC)
    + return -ENOENT;
    +
    + return 0;
    +}
    +
    +const char *sysfs_find_mountpoint(void)
    +{
    + const char **ptr;
    + char type[100];
    + FILE *fp;
    +
    + if (sysfs_found)
    + return (const char *) sysfs_mountpoint;
    +
    + ptr = sysfs_known_mountpoints;
    + while (*ptr) {
    + if (sysfs_valid_mountpoint(*ptr) == 0) {
    + sysfs_found = 1;
    + strcpy(sysfs_mountpoint, *ptr);
    + return sysfs_mountpoint;
    + }
    + ptr++;
    + }
    +
    + /* give up and parse /proc/mounts */
    + fp = fopen("/proc/mounts", "r");
    + if (fp == NULL)
    + return NULL;
    +
    + while (!sysfs_found &&
    + fscanf(fp, "%*s %" STR(PATH_MAX) "s %99s %*s %*d %*d\n",
    + sysfs_mountpoint, type) == 2) {
    +
    + if (strcmp(type, "sysfs") == 0)
    + sysfs_found = 1;
    + }
    +
    + fclose(fp);
    +
    + return sysfs_found ? sysfs_mountpoint : NULL;
    +}
    diff --git a/tools/perf/util/sysfs.h b/tools/perf/util/sysfs.h
    new file mode 100644
    index 0000000..a813b72
    --- /dev/null
    +++ b/tools/perf/util/sysfs.h
    @@ -0,0 +1,6 @@
    +#ifndef __SYSFS_H__
    +#define __SYSFS_H__
    +
    +const char *sysfs_find_mountpoint(void);
    +
    +#endif /* __DEBUGFS_H__ */
    --
    1.7.6.5


    \
     
     \ /
      Last update: 2012-01-16 13:37    [W:0.046 / U:92.672 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site