diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-12-11 16:03:01 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-12-11 16:03:01 -0500 |
| commit | 956fa57106d1ad3ffbe73f4534b9f3b3bc92dd6c (patch) | |
| tree | 2a6ebee982995435ca424fba2cac90669fe610b1 /tools | |
| parent | ce27309f67c347e6e49ebd45042f5362b0ccbdcc (diff) | |
perf evlist: Introduce strerror_mmap method
To pretty print hints about perf_evlist__mmap errors. Will be used in
'trace' in the next patch.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-2g3gczfwyz0xt3we0s15mqqt@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/util/evlist.c | 23 | ||||
| -rw-r--r-- | tools/perf/util/evlist.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index cfbe2b99b9aa..bb5dfc5d1e75 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | */ | 8 | */ |
| 9 | #include "util.h" | 9 | #include "util.h" |
| 10 | #include <api/fs/debugfs.h> | 10 | #include <api/fs/debugfs.h> |
| 11 | #include <api/fs/fs.h> | ||
| 11 | #include <poll.h> | 12 | #include <poll.h> |
| 12 | #include "cpumap.h" | 13 | #include "cpumap.h" |
| 13 | #include "thread_map.h" | 14 | #include "thread_map.h" |
| @@ -1483,6 +1484,28 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused, | |||
| 1483 | return 0; | 1484 | return 0; |
| 1484 | } | 1485 | } |
| 1485 | 1486 | ||
| 1487 | int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, size_t size) | ||
| 1488 | { | ||
| 1489 | char sbuf[STRERR_BUFSIZE], *emsg = strerror_r(err, sbuf, sizeof(sbuf)); | ||
| 1490 | int value; | ||
| 1491 | |||
| 1492 | switch (err) { | ||
| 1493 | case EPERM: | ||
| 1494 | sysctl__read_int("kernel/perf_event_mlock_kb", &value); | ||
| 1495 | scnprintf(buf, size, "Error:\t%s.\n" | ||
| 1496 | "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" | ||
| 1497 | "Hint:\tTried using %zd kB.\n" | ||
| 1498 | "Hint:\tTry using a bigger -m/--mmap-pages value.", | ||
| 1499 | emsg, value, evlist->mmap_len / 1024); | ||
| 1500 | break; | ||
| 1501 | default: | ||
| 1502 | scnprintf(buf, size, "%s", emsg); | ||
| 1503 | break; | ||
| 1504 | } | ||
| 1505 | |||
| 1506 | return 0; | ||
| 1507 | } | ||
| 1508 | |||
| 1486 | void perf_evlist__to_front(struct perf_evlist *evlist, | 1509 | void perf_evlist__to_front(struct perf_evlist *evlist, |
| 1487 | struct perf_evsel *move_evsel) | 1510 | struct perf_evsel *move_evsel) |
| 1488 | { | 1511 | { |
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 649b0c597283..0ba93f67ab94 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h | |||
| @@ -185,6 +185,7 @@ size_t perf_evlist__fprintf(struct perf_evlist *evlist, FILE *fp); | |||
| 185 | 185 | ||
| 186 | int perf_evlist__strerror_tp(struct perf_evlist *evlist, int err, char *buf, size_t size); | 186 | int perf_evlist__strerror_tp(struct perf_evlist *evlist, int err, char *buf, size_t size); |
| 187 | int perf_evlist__strerror_open(struct perf_evlist *evlist, int err, char *buf, size_t size); | 187 | int perf_evlist__strerror_open(struct perf_evlist *evlist, int err, char *buf, size_t size); |
| 188 | int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, size_t size); | ||
| 188 | 189 | ||
| 189 | static inline unsigned int perf_mmap__read_head(struct perf_mmap *mm) | 190 | static inline unsigned int perf_mmap__read_head(struct perf_mmap *mm) |
| 190 | { | 191 | { |
