|
@@ -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;
|