perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
#include <stdbool.h>
|
|
|
|
#include "tests.h"
|
|
|
|
#include "dso.h"
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
|
|
static int test(const char *path, bool alloc_name, bool alloc_ext,
|
|
|
|
bool kmod, bool comp, const char *name, const char *ext)
|
|
|
|
{
|
|
|
|
struct kmod_path m;
|
|
|
|
|
|
|
|
memset(&m, 0x0, sizeof(m));
|
|
|
|
|
|
|
|
TEST_ASSERT_VAL("kmod_path__parse",
|
|
|
|
!__kmod_path__parse(&m, path, alloc_name, alloc_ext));
|
|
|
|
|
|
|
|
pr_debug("%s - alloc name %d, alloc ext %d, kmod %d, comp %d, name '%s', ext '%s'\n",
|
|
|
|
path, alloc_name, alloc_ext, m.kmod, m.comp, m.name, m.ext);
|
|
|
|
|
|
|
|
TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod);
|
|
|
|
TEST_ASSERT_VAL("wrong comp", m.comp == comp);
|
|
|
|
|
|
|
|
if (ext)
|
|
|
|
TEST_ASSERT_VAL("wrong ext", m.ext && !strcmp(ext, m.ext));
|
|
|
|
else
|
|
|
|
TEST_ASSERT_VAL("wrong ext", !m.ext);
|
|
|
|
|
|
|
|
if (name)
|
|
|
|
TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name));
|
|
|
|
else
|
|
|
|
TEST_ASSERT_VAL("wrong name", !m.name);
|
|
|
|
|
|
|
|
free(m.name);
|
|
|
|
free(m.ext);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2015-06-03 16:52:21 +08:00
|
|
|
static int test_is_kernel_module(const char *path, int cpumode, bool expect)
|
|
|
|
{
|
|
|
|
TEST_ASSERT_VAL("is_kernel_module",
|
|
|
|
(!!is_kernel_module(path, cpumode)) == (!!expect));
|
|
|
|
pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n",
|
|
|
|
path, cpumode, expect ? "true" : "false");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
#define T(path, an, ae, k, c, n, e) \
|
|
|
|
TEST_ASSERT_VAL("failed", !test(path, an, ae, k, c, n, e))
|
|
|
|
|
2015-06-03 16:52:21 +08:00
|
|
|
#define M(path, c, e) \
|
|
|
|
TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))
|
|
|
|
|
perf tests: Pass the subtest index to each test routine
Some tests have sub-tests we want to run, so allow passing this.
Wang tried to avoid having to touch all tests, but then, having the
test.func in an anonymous union makes the build fail on older compilers,
like the one in RHEL6, where:
test a = {
.func = foo,
};
fails.
To fix it leave the func pointer in the main structure and pass the subtest
index to all tests, end result function is the same, but we have just one
function pointer, not two, with and without the subtest index as an argument.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-5genj0ficwdmelpoqlds0u4y@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-11-19 23:01:48 +08:00
|
|
|
int test__kmod_path__parse(int subtest __maybe_unused)
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
{
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("/xxxx/xxxx/x-x.ko", true , true , true, false, "[x_x]", NULL);
|
|
|
|
T("/xxxx/xxxx/x-x.ko", false , true , true, false, NULL , NULL);
|
|
|
|
T("/xxxx/xxxx/x-x.ko", true , false , true, false, "[x_x]", NULL);
|
|
|
|
T("/xxxx/xxxx/x-x.ko", false , false , true, false, NULL , NULL);
|
2015-06-03 16:52:21 +08:00
|
|
|
M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
|
|
|
|
M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true);
|
|
|
|
M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false);
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("/xxxx/xxxx/x.ko.gz", true , true , true, true, "[x]", "gz");
|
|
|
|
T("/xxxx/xxxx/x.ko.gz", false , true , true, true, NULL , "gz");
|
|
|
|
T("/xxxx/xxxx/x.ko.gz", true , false , true, true, "[x]", NULL);
|
|
|
|
T("/xxxx/xxxx/x.ko.gz", false , false , true, true, NULL , NULL);
|
2015-06-03 16:52:21 +08:00
|
|
|
M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
|
|
|
|
M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
|
|
|
|
M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false);
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("/xxxx/xxxx/x.gz", true , true , false, true, "x.gz" ,"gz");
|
|
|
|
T("/xxxx/xxxx/x.gz", false , true , false, true, NULL ,"gz");
|
|
|
|
T("/xxxx/xxxx/x.gz", true , false , false, true, "x.gz" , NULL);
|
|
|
|
T("/xxxx/xxxx/x.gz", false , false , false, true, NULL , NULL);
|
2015-06-03 16:52:21 +08:00
|
|
|
M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
|
|
|
|
M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false);
|
|
|
|
M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false);
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("x.gz", true , true , false, true, "x.gz", "gz");
|
|
|
|
T("x.gz", false , true , false, true, NULL , "gz");
|
|
|
|
T("x.gz", true , false , false, true, "x.gz", NULL);
|
|
|
|
T("x.gz", false , false , false, true, NULL , NULL);
|
2015-06-03 16:52:21 +08:00
|
|
|
M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
|
|
|
|
M("x.gz", PERF_RECORD_MISC_KERNEL, false);
|
|
|
|
M("x.gz", PERF_RECORD_MISC_USER, false);
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("x.ko.gz", true , true , true, true, "[x]", "gz");
|
|
|
|
T("x.ko.gz", false , true , true, true, NULL , "gz");
|
|
|
|
T("x.ko.gz", true , false , true, true, "[x]", NULL);
|
|
|
|
T("x.ko.gz", false , false , true, true, NULL , NULL);
|
2015-06-03 16:52:21 +08:00
|
|
|
M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
|
|
|
|
M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
|
|
|
|
M("x.ko.gz", PERF_RECORD_MISC_USER, false);
|
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("[test_module]", true , true , true, false, "[test_module]", NULL);
|
|
|
|
T("[test_module]", false , true , true, false, NULL , NULL);
|
|
|
|
T("[test_module]", true , false , true, false, "[test_module]", NULL);
|
|
|
|
T("[test_module]", false , false , true, false, NULL , NULL);
|
|
|
|
M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
|
|
|
|
M("[test_module]", PERF_RECORD_MISC_KERNEL, true);
|
|
|
|
M("[test_module]", PERF_RECORD_MISC_USER, false);
|
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("[test.module]", true , true , true, false, "[test.module]", NULL);
|
|
|
|
T("[test.module]", false , true , true, false, NULL , NULL);
|
|
|
|
T("[test.module]", true , false , true, false, "[test.module]", NULL);
|
|
|
|
T("[test.module]", false , false , true, false, NULL , NULL);
|
|
|
|
M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
|
|
|
|
M("[test.module]", PERF_RECORD_MISC_KERNEL, true);
|
|
|
|
M("[test.module]", PERF_RECORD_MISC_USER, false);
|
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("[vdso]", true , true , false, false, "[vdso]", NULL);
|
|
|
|
T("[vdso]", false , true , false, false, NULL , NULL);
|
|
|
|
T("[vdso]", true , false , false, false, "[vdso]", NULL);
|
|
|
|
T("[vdso]", false , false , false, false, NULL , NULL);
|
|
|
|
M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
|
|
|
|
M("[vdso]", PERF_RECORD_MISC_KERNEL, false);
|
|
|
|
M("[vdso]", PERF_RECORD_MISC_USER, false);
|
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("[vsyscall]", true , true , false, false, "[vsyscall]", NULL);
|
|
|
|
T("[vsyscall]", false , true , false, false, NULL , NULL);
|
|
|
|
T("[vsyscall]", true , false , false, false, "[vsyscall]", NULL);
|
|
|
|
T("[vsyscall]", false , false , false, false, NULL , NULL);
|
|
|
|
M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
|
|
|
|
M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false);
|
|
|
|
M("[vsyscall]", PERF_RECORD_MISC_USER, false);
|
|
|
|
|
|
|
|
/* path alloc_name alloc_ext kmod comp name ext */
|
|
|
|
T("[kernel.kallsyms]", true , true , false, false, "[kernel.kallsyms]", NULL);
|
|
|
|
T("[kernel.kallsyms]", false , true , false, false, NULL , NULL);
|
|
|
|
T("[kernel.kallsyms]", true , false , false, false, "[kernel.kallsyms]", NULL);
|
|
|
|
T("[kernel.kallsyms]", false , false , false, false, NULL , NULL);
|
|
|
|
M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
|
|
|
|
M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false);
|
|
|
|
M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false);
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|