58 lines · c
1/* SPDX-License-Identifier: LGPL-2.1 */2 3#include <errno.h>4#include "util/debug.h"5#include "util/rlimit.h"6#include <sys/time.h>7#include <sys/resource.h>8 9/*10 * Bump the memlock so that we can get bpf maps of a reasonable size,11 * like the ones used with 'perf trace' and with 'perf test bpf',12 * improve this to some specific request if needed.13 */14void rlimit__bump_memlock(void)15{16 struct rlimit rlim;17 18 if (getrlimit(RLIMIT_MEMLOCK, &rlim) == 0) {19 rlim.rlim_cur *= 4;20 rlim.rlim_max *= 4;21 22 if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0) {23 rlim.rlim_cur /= 2;24 rlim.rlim_max /= 2;25 26 if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0)27 pr_debug("Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc\n");28 }29 }30}31 32bool rlimit__increase_nofile(enum rlimit_action *set_rlimit)33{34 int old_errno;35 struct rlimit l;36 37 if (*set_rlimit < INCREASED_MAX) {38 old_errno = errno;39 40 if (getrlimit(RLIMIT_NOFILE, &l) == 0) {41 if (*set_rlimit == NO_CHANGE) {42 l.rlim_cur = l.rlim_max;43 } else {44 l.rlim_cur = l.rlim_max + 1000;45 l.rlim_max = l.rlim_cur;46 }47 if (setrlimit(RLIMIT_NOFILE, &l) == 0) {48 (*set_rlimit) += 1;49 errno = old_errno;50 return true;51 }52 }53 errno = old_errno;54 }55 56 return false;57}58