.proc_map_timeout    = 500,
                        .overwrite      = 1,
                },
-               .max_stack           = sysctl_perf_event_max_stack,
+               .max_stack           = sysctl__max_stack(),
                .sym_pcnt_filter     = 5,
                .nr_threads_synthesize = UINT_MAX,
        };
 
                mmap_pages_user_set = false;
 
        if (trace.max_stack == UINT_MAX) {
-               trace.max_stack = input_name ? PERF_MAX_STACK_DEPTH : sysctl_perf_event_max_stack;
+               trace.max_stack = input_name ? PERF_MAX_STACK_DEPTH : sysctl__max_stack();
                max_stack_user_set = false;
        }
 
 
        int err;
        const char *cmd;
        char sbuf[STRERR_BUFSIZE];
-       int value;
 
        /* libsubcmd init */
        exec_cmd_init("perf", PREFIX, PERF_EXEC_PATH, EXEC_PATH_ENVIRONMENT);
        /* The page_size is placed in util object. */
        page_size = sysconf(_SC_PAGE_SIZE);
 
-       if (sysctl__read_int("kernel/perf_event_max_stack", &value) == 0)
-               sysctl_perf_event_max_stack = value;
-
-       if (sysctl__read_int("kernel/perf_event_max_contexts_per_stack", &value) == 0)
-               sysctl_perf_event_max_contexts_per_stack = value;
-
        cmd = extract_argv0_path(argv[0]);
        if (!cmd)
                cmd = "perf-help";
 
                        return scnprintf(msg, size,
                                         "Not enough memory to setup event with callchain.\n"
                                         "Hint: Try tweaking /proc/sys/kernel/perf_event_max_stack\n"
-                                        "Hint: Current value: %d", sysctl_perf_event_max_stack);
+                                        "Hint: Current value: %d", sysctl__max_stack());
                break;
        case ENODEV:
                if (target->cpu_list)
 
 int sysctl_perf_event_max_stack = PERF_MAX_STACK_DEPTH;
 int sysctl_perf_event_max_contexts_per_stack = PERF_MAX_CONTEXTS_PER_STACK;
 
+int sysctl__max_stack(void)
+{
+       int value;
+
+       if (sysctl__read_int("kernel/perf_event_max_stack", &value) == 0)
+               sysctl_perf_event_max_stack = value;
+
+       if (sysctl__read_int("kernel/perf_event_max_contexts_per_stack", &value) == 0)
+               sysctl_perf_event_max_contexts_per_stack = value;
+
+       return sysctl_perf_event_max_stack;
+}
+
 bool test_attr__enabled;
 
 bool perf_host  = true;
 
 extern unsigned int page_size;
 int __pure cacheline_size(void);
 
+int sysctl__max_stack(void);
+
 int fetch_kernel_version(unsigned int *puint,
                         char *str, size_t str_sz);
 #define KVER_VERSION(x)                (((x) >> 16) & 0xff)