brintos

brintos / linux-shallow public Read only

0
0
Text · 1.2 KiB · f857405 Raw
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