162306a36Sopenharmony_ci/* SPDX-License-Identifier: LGPL-2.1 */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#include "util/debug.h"
462306a36Sopenharmony_ci#include "util/rlimit.h"
562306a36Sopenharmony_ci#include <sys/time.h>
662306a36Sopenharmony_ci#include <sys/resource.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/*
962306a36Sopenharmony_ci * Bump the memlock so that we can get bpf maps of a reasonable size,
1062306a36Sopenharmony_ci * like the ones used with 'perf trace' and with 'perf test bpf',
1162306a36Sopenharmony_ci * improve this to some specific request if needed.
1262306a36Sopenharmony_ci */
1362306a36Sopenharmony_civoid rlimit__bump_memlock(void)
1462306a36Sopenharmony_ci{
1562306a36Sopenharmony_ci	struct rlimit rlim;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	if (getrlimit(RLIMIT_MEMLOCK, &rlim) == 0) {
1862306a36Sopenharmony_ci		rlim.rlim_cur *= 4;
1962306a36Sopenharmony_ci		rlim.rlim_max *= 4;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci		if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0) {
2262306a36Sopenharmony_ci			rlim.rlim_cur /= 2;
2362306a36Sopenharmony_ci			rlim.rlim_max /= 2;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci			if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0)
2662306a36Sopenharmony_ci				pr_debug("Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc\n");
2762306a36Sopenharmony_ci		}
2862306a36Sopenharmony_ci	}
2962306a36Sopenharmony_ci}
30