#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdbool.h>#include <sys/vfs.h>#include <sys/types.h>#include <sys/stat.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; bool tracefs_configured(void){ return tracefs_find_mountpoint() != NULL;} /* 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;}
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>
#include <sys/vfs.h>
#include <sys/types.h>
#include <sys/stat.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;
bool tracefs_configured(void)
{
return tracefs_find_mountpoint() != NULL;
}
/* 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;
}