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 15:40:25 +01: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 08:52:21 +00: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 15:40:25 +01: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 08:52:21 +00:00
# define M(path, c, e) \
TEST_ASSERT_VAL ( " failed " , ! test_is_kernel_module ( path , c , e ) )
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 15:40:25 +01:00
int test__kmod_path__parse ( void )
{
/* 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 08:52:21 +00: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 15:40:25 +01: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 08:52:21 +00: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 15:40:25 +01: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 08:52:21 +00: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 15:40:25 +01: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 08:52:21 +00: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 15:40:25 +01: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 08:52:21 +00: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 15:40:25 +01:00
return 0 ;
}