perf evlist: Clarify sterror_mmap variable names
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / evlist.c
index cfbe2b99b9aa5826b60fc574a211a115fc6f6a2d..d661f252b8914b7b4ebebfe561fa6e4cd01b9cd7 100644 (file)
@@ -8,6 +8,7 @@
  */
 #include "util.h"
 #include <api/fs/debugfs.h>
+#include <api/fs/fs.h>
 #include <poll.h>
 #include "cpumap.h"
 #include "thread_map.h"
@@ -1483,6 +1484,28 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused,
        return 0;
 }
 
+int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, size_t size)
+{
+       char sbuf[STRERR_BUFSIZE], *emsg = strerror_r(err, sbuf, sizeof(sbuf));
+       int pages_attempted = evlist->mmap_len / 1024, pages_max_per_user;
+
+       switch (err) {
+       case EPERM:
+               sysctl__read_int("kernel/perf_event_mlock_kb", &pages_max_per_user);
+               scnprintf(buf, size, "Error:\t%s.\n"
+                                    "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n"
+                                    "Hint:\tTried using %zd kB.\n"
+                                    "Hint:\tTry using a smaller -m/--mmap-pages value.",
+                                    emsg, pages_max_per_user, pages_attempted);
+               break;
+       default:
+               scnprintf(buf, size, "%s", emsg);
+               break;
+       }
+
+       return 0;
+}
+
 void perf_evlist__to_front(struct perf_evlist *evlist,
                           struct perf_evsel *move_evsel)
 {