diff options
-rw-r--r-- | tools/perf/util/evlist.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 7847f3885081..ac808680e61c 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -893,10 +893,22 @@ out_unmap: | |||
893 | 893 | ||
894 | static size_t perf_evlist__mmap_size(unsigned long pages) | 894 | static size_t perf_evlist__mmap_size(unsigned long pages) |
895 | { | 895 | { |
896 | /* 512 kiB: default amount of unprivileged mlocked memory */ | 896 | if (pages == UINT_MAX) { |
897 | if (pages == UINT_MAX) | 897 | int max; |
898 | pages = (512 * 1024) / page_size; | 898 | |
899 | else if (!is_power_of_2(pages)) | 899 | if (sysctl__read_int("kernel/perf_event_mlock_kb", &max) < 0) { |
900 | /* | ||
901 | * Pick a once upon a time good value, i.e. things look | ||
902 | * strange since we can't read a sysctl value, but lets not | ||
903 | * die yet... | ||
904 | */ | ||
905 | max = 512; | ||
906 | } else { | ||
907 | max -= (page_size / 1024); | ||
908 | } | ||
909 | |||
910 | pages = (max * 1024) / page_size; | ||
911 | } else if (!is_power_of_2(pages)) | ||
900 | return 0; | 912 | return 0; |
901 | 913 | ||
902 | return (pages + 1) * page_size; | 914 | return (pages + 1) * page_size; |