perf evlist: Do not use hard coded value for a mmap_pages default
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / evlist.c
index 7847f388508119e469dfbec09998fe9727c117b0..ac808680e61c7e34713a8dc10d346c6be86c0b3c 100644 (file)
@@ -893,10 +893,22 @@ out_unmap:
 
 static size_t perf_evlist__mmap_size(unsigned long pages)
 {
-       /* 512 kiB: default amount of unprivileged mlocked memory */
-       if (pages == UINT_MAX)
-               pages = (512 * 1024) / page_size;
-       else if (!is_power_of_2(pages))
+       if (pages == UINT_MAX) {
+               int max;
+
+               if (sysctl__read_int("kernel/perf_event_mlock_kb", &max) < 0) {
+                       /*
+                        * Pick a once upon a time good value, i.e. things look
+                        * strange since we can't read a sysctl value, but lets not
+                        * die yet...
+                        */
+                       max = 512;
+               } else {
+                       max -= (page_size / 1024);
+               }
+
+               pages = (max * 1024) / page_size;
+       } else if (!is_power_of_2(pages))
                return 0;
 
        return (pages + 1) * page_size;