Linux Audio

Check our new training course

Loading...
v5.4
 1/* SPDX-License-Identifier: LGPL-2.1 */
 2
 
 3#include "util/debug.h"
 4#include "util/rlimit.h"
 5#include <sys/time.h>
 6#include <sys/resource.h>
 7
 8/*
 9 * Bump the memlock so that we can get bpf maps of a reasonable size,
10 * like the ones used with 'perf trace' and with 'perf test bpf',
11 * improve this to some specific request if needed.
12 */
13void rlimit__bump_memlock(void)
14{
15	struct rlimit rlim;
16
17	if (getrlimit(RLIMIT_MEMLOCK, &rlim) == 0) {
18		rlim.rlim_cur *= 4;
19		rlim.rlim_max *= 4;
20
21		if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0) {
22			rlim.rlim_cur /= 2;
23			rlim.rlim_max /= 2;
24
25			if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0)
26				pr_debug("Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc\n");
27		}
28	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29}
v6.8
 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}