[tip:perf/core] perf trace: Improve the error messages

2013-10-14 Thread tip-bot for Ramkumar Ramachandra
Commit-ID:  87f918685a452be514d060a09eeb4e0c91422e86
Gitweb: http://git.kernel.org/tip/87f918685a452be514d060a09eeb4e0c91422e86
Author: Ramkumar Ramachandra 
AuthorDate: Fri, 4 Oct 2013 10:47:31 +0530
Committer:  Arnaldo Carvalho de Melo 
CommitDate: Mon, 14 Oct 2013 10:24:04 -0300

perf trace: Improve the error messages

Currently, execution of 'perf trace' reports the following cryptic
message to the user:

$ perf trace
Couldn't read the raw_syscalls tracepoints information!

Typically this happens because the user does not have permissions to
read the debugfs filesystem. Also handle the case when the kernel was
not compiled with debugfs support or when it isn't mounted.

Now, the tool prints detailed error messages:

$ perf trace
Error:  Unable to find debugfs
Hint:   Was your kernel was compiled with debugfs support?
Hint:   Is the debugfs filesystem mounted?
Hint:   Try 'sudo mount -t debugfs nodev /sys/kernel/debug'

$ perf trace
Error:  No permissions to read /sys/kernel/debug//tracing/events/raw_syscalls
Hint:   Try 'sudo mount -o remount,mode=755 /sys/kernel/debug/'

Signed-off-by: Ramkumar Ramachandra 
Cc: David Ahern 
Cc: Ingo Molnar 
Link: 
http://lkml.kernel.org/r/1380863851-14460-1-git-send-email-artag...@gmail.com
[ Added ready to use commands to fix the issues as extra hints, use the
  current debugfs mount point when reporting permission error, use
  strerror_r instead of the deprecated sys_errlist, as reported by David Ahern ]
Signed-off-by: Arnaldo Carvalho de Melo 
---
 tools/perf/builtin-trace.c | 37 -
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 19ddcab..5496546 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1590,17 +1590,13 @@ static int trace__run(struct trace *trace, int argc, 
const char **argv)
}
 
if (perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_enter", 
trace__sys_enter) ||
-   perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_exit", 
trace__sys_exit)) {
-   fprintf(trace->output, "Couldn't read the raw_syscalls 
tracepoints information!\n");
-   goto out_delete_evlist;
-   }
+   perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_exit", 
trace__sys_exit))
+   goto out_error_tp;
 
if (trace->sched &&
-   perf_evlist__add_newtp(evlist, "sched", "sched_stat_runtime",
-  trace__sched_stat_runtime)) {
-   fprintf(trace->output, "Couldn't read the sched_stat_runtime 
tracepoint information!\n");
-   goto out_delete_evlist;
-   }
+   perf_evlist__add_newtp(evlist, "sched", "sched_stat_runtime",
+   trace__sched_stat_runtime))
+   goto out_error_tp;
 
err = perf_evlist__create_maps(evlist, >opts.target);
if (err < 0) {
@@ -1717,6 +1713,29 @@ out_delete_evlist:
 out:
trace->live = false;
return err;
+out_error_tp:
+   switch(errno) {
+   case ENOENT:
+   fputs("Error:\tUnable to find debugfs\n"
+ "Hint:\tWas your kernel was compiled with debugfs 
support?\n"
+ "Hint:\tIs the debugfs filesystem mounted?\n"
+ "Hint:\tTry 'sudo mount -t debugfs nodev 
/sys/kernel/debug'\n",
+ trace->output);
+   break;
+   case EACCES:
+   fprintf(trace->output,
+   "Error:\tNo permissions to read 
%s/tracing/events/raw_syscalls\n"
+   "Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n",
+   debugfs_mountpoint, debugfs_mountpoint);
+   break;
+   default: {
+   char bf[256];
+   fprintf(trace->output, "Can't trace: %s\n",
+   strerror_r(errno, bf, sizeof(bf)));
+   }
+   break;
+   }
+   goto out_delete_evlist;
 }
 
 static int trace__replay(struct trace *trace)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[tip:perf/core] perf trace: Improve the error messages

2013-10-14 Thread tip-bot for Ramkumar Ramachandra
Commit-ID:  87f918685a452be514d060a09eeb4e0c91422e86
Gitweb: http://git.kernel.org/tip/87f918685a452be514d060a09eeb4e0c91422e86
Author: Ramkumar Ramachandra artag...@gmail.com
AuthorDate: Fri, 4 Oct 2013 10:47:31 +0530
Committer:  Arnaldo Carvalho de Melo a...@redhat.com
CommitDate: Mon, 14 Oct 2013 10:24:04 -0300

perf trace: Improve the error messages

Currently, execution of 'perf trace' reports the following cryptic
message to the user:

$ perf trace
Couldn't read the raw_syscalls tracepoints information!

Typically this happens because the user does not have permissions to
read the debugfs filesystem. Also handle the case when the kernel was
not compiled with debugfs support or when it isn't mounted.

Now, the tool prints detailed error messages:

$ perf trace
Error:  Unable to find debugfs
Hint:   Was your kernel was compiled with debugfs support?
Hint:   Is the debugfs filesystem mounted?
Hint:   Try 'sudo mount -t debugfs nodev /sys/kernel/debug'

$ perf trace
Error:  No permissions to read /sys/kernel/debug//tracing/events/raw_syscalls
Hint:   Try 'sudo mount -o remount,mode=755 /sys/kernel/debug/'

Signed-off-by: Ramkumar Ramachandra artag...@gmail.com
Cc: David Ahern dsah...@gmail.com
Cc: Ingo Molnar mi...@kernel.org
Link: 
http://lkml.kernel.org/r/1380863851-14460-1-git-send-email-artag...@gmail.com
[ Added ready to use commands to fix the issues as extra hints, use the
  current debugfs mount point when reporting permission error, use
  strerror_r instead of the deprecated sys_errlist, as reported by David Ahern ]
Signed-off-by: Arnaldo Carvalho de Melo a...@redhat.com
---
 tools/perf/builtin-trace.c | 37 -
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 19ddcab..5496546 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1590,17 +1590,13 @@ static int trace__run(struct trace *trace, int argc, 
const char **argv)
}
 
if (perf_evlist__add_newtp(evlist, raw_syscalls, sys_enter, 
trace__sys_enter) ||
-   perf_evlist__add_newtp(evlist, raw_syscalls, sys_exit, 
trace__sys_exit)) {
-   fprintf(trace-output, Couldn't read the raw_syscalls 
tracepoints information!\n);
-   goto out_delete_evlist;
-   }
+   perf_evlist__add_newtp(evlist, raw_syscalls, sys_exit, 
trace__sys_exit))
+   goto out_error_tp;
 
if (trace-sched 
-   perf_evlist__add_newtp(evlist, sched, sched_stat_runtime,
-  trace__sched_stat_runtime)) {
-   fprintf(trace-output, Couldn't read the sched_stat_runtime 
tracepoint information!\n);
-   goto out_delete_evlist;
-   }
+   perf_evlist__add_newtp(evlist, sched, sched_stat_runtime,
+   trace__sched_stat_runtime))
+   goto out_error_tp;
 
err = perf_evlist__create_maps(evlist, trace-opts.target);
if (err  0) {
@@ -1717,6 +1713,29 @@ out_delete_evlist:
 out:
trace-live = false;
return err;
+out_error_tp:
+   switch(errno) {
+   case ENOENT:
+   fputs(Error:\tUnable to find debugfs\n
+ Hint:\tWas your kernel was compiled with debugfs 
support?\n
+ Hint:\tIs the debugfs filesystem mounted?\n
+ Hint:\tTry 'sudo mount -t debugfs nodev 
/sys/kernel/debug'\n,
+ trace-output);
+   break;
+   case EACCES:
+   fprintf(trace-output,
+   Error:\tNo permissions to read 
%s/tracing/events/raw_syscalls\n
+   Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n,
+   debugfs_mountpoint, debugfs_mountpoint);
+   break;
+   default: {
+   char bf[256];
+   fprintf(trace-output, Can't trace: %s\n,
+   strerror_r(errno, bf, sizeof(bf)));
+   }
+   break;
+   }
+   goto out_delete_evlist;
 }
 
 static int trace__replay(struct trace *trace)
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/