perf lock record: improve message when tracepoints are not enabled
PATCH 1/1 perf lock record: improve message when tracepoints are not enabled
If CONFIG options required for perf-lock are not enabled then the corresponding tracepoints will not be enabled. Currently, the message to the user is:
$ perf lock record -a -- sleep 1 invalid or unsupported event: 'lock:lock_acquire' Run 'perf list' for a list of valid events
Improve the message with a suggestion on which CONFIG options are needed:
$ perf lock record -a -- sleep 1 tracepoint lock:lock_acquire is not enabled. Are CONFIG_LOCKDEP and CONFIG_LOCK_STAT enabled?
Suggested-by Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by David Ahern <[email protected]>
Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Peter Zijlstra <[email protected]>
--- tools/perf/builtin-lock.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-)
tools/perf/builtin-lock.c +24 -5
@@ -903,16 +903,19 @@ static const struct option lock_options[] = { OPT_END() }; +static const char *const lock_tracepoints[] = { +"lock:lock_acquire" ,/* CONFIG_LOCKDEP */ +"lock:lock_acquired" ,/* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ +"lock:lock_contended" ,/* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ +"lock:lock_release" ,/* CONFIG_LOCKDEP */ +}; +static const char *record_args[] = {"record" ,"-R" ,"-f" ,"-m" ,"1024" ,"-c" ,"1" , -"-e" ,"lock:lock_acquire" , -"-e" ,"lock:lock_acquired" , -"-e" ,"lock:lock_contended" , -"-e" ,"lock:lock_release" , };static int __cmd_record (int argc,const char **argv)
@@ -920,15 +923,31 @@ static int __cmd_record(int argc, const char **argv)unsigned int rec_argc, i, j;const char **rec_argv; +for (i =0 ; i <ARRAY_SIZE (lock_tracepoints); i++) { +if (!is_valid_tracepoint (lock_tracepoints[i])) { +pr_err ("tracepoint %s is not enabled. " +"Are CONFIG_LOCKDEP and CONFIG_LOCK_STAT enabled?\n" , + lock_tracepoints[i]); +return 1 ; + } + } + rec_argc =ARRAY_SIZE (record_args) + argc -1 ; - rec_argv =calloc (rec_argc +1 ,sizeof (char *)); +/* factor of 2 is for -e in front of each tracepoint */ + rec_argc +=2 *ARRAY_SIZE (lock_tracepoints); + rec_argv =calloc (rec_argc +1 ,sizeof (char *));if (rec_argv ==NULL )return -ENOMEM ;for (i =0 ; i <ARRAY_SIZE (record_args); i++) rec_argv[i] =strdup (record_args[i]); +for (j =0 ; j <ARRAY_SIZE (lock_tracepoints); j++) { + rec_argv[i++] ="-e" ; + rec_argv[i++] =strdup (lock_tracepoints[j]); + } +for (j =1 ; j < (unsigned int )argc; j++, i++) rec_argv[i] = argv[j];
Signature · 1 line
1.7.10.1
Commit-ID: d25dcba8541c1cc31621d5cefce0304dafb9ae4f Gitweb: http://git.kernel.org/tip/d25dcba8541c1cc31621d5cefce0304dafb9ae4f Author: David Ahern <[email protected]> AuthorDate: Thu, 9 Aug 2012 10:35:37 -0600 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 9 Aug 2012 14:14:28 -0300
perf lock record: improve message when tracepoints are not enabled
If CONFIG options required for perf-lock are not enabled then the corresponding tracepoints will not be enabled. Currently, the message to the user is:
$ perf lock record -a -- sleep 1 invalid or unsupported event: 'lock:lock_acquire' Run 'perf list' for a list of valid events
Improve the message with a suggestion on which CONFIG options are needed:
$ perf lock record -a -- sleep 1 tracepoint lock:lock_acquire is not enabled. Are CONFIG_LOCKDEP and CONFIG_LOCK_STAT enabled?
Suggested-by Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Peter Zijlstra <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-lock.c | 29 ++++++++++++++++++++++++----- 1 files changed, 24 insertions(+), 5 deletions(-)
tools/perf/builtin-lock.c +24 -5
@@ -903,16 +903,19 @@ static const struct option lock_options[] = { OPT_END() }; +static const char *const lock_tracepoints[] = { +"lock:lock_acquire" ,/* CONFIG_LOCKDEP */ +"lock:lock_acquired" ,/* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ +"lock:lock_contended" ,/* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ +"lock:lock_release" ,/* CONFIG_LOCKDEP */ +}; +static const char *record_args[] = {"record" ,"-R" ,"-f" ,"-m" ,"1024" ,"-c" ,"1" , -"-e" ,"lock:lock_acquire" , -"-e" ,"lock:lock_acquired" , -"-e" ,"lock:lock_contended" , -"-e" ,"lock:lock_release" , };static int __cmd_record (int argc,const char **argv)
@@ -920,15 +923,31 @@ static int __cmd_record(int argc, const char **argv)unsigned int rec_argc, i, j;const char **rec_argv; +for (i =0 ; i <ARRAY_SIZE (lock_tracepoints); i++) { +if (!is_valid_tracepoint (lock_tracepoints[i])) { +pr_err ("tracepoint %s is not enabled. " +"Are CONFIG_LOCKDEP and CONFIG_LOCK_STAT enabled?\n" , + lock_tracepoints[i]); +return 1 ; + } + } + rec_argc =ARRAY_SIZE (record_args) + argc -1 ; - rec_argv =calloc (rec_argc +1 ,sizeof (char *)); +/* factor of 2 is for -e in front of each tracepoint */ + rec_argc +=2 *ARRAY_SIZE (lock_tracepoints); + rec_argv =calloc (rec_argc +1 ,sizeof (char *));if (rec_argv ==NULL )return -ENOMEM ;for (i =0 ; i <ARRAY_SIZE (record_args); i++) rec_argv[i] =strdup (record_args[i]); +for (j =0 ; j <ARRAY_SIZE (lock_tracepoints); j++) { + rec_argv[i++] ="-e" ; + rec_argv[i++] =strdup (lock_tracepoints[j]); + } +for (j =1 ; j < (unsigned int )argc; j++, i++) rec_argv[i] = argv[j];