Browse Source

samples/bpf: xdp_monitor increase memory rlimit

Other concurrent running programs, like perf or the XDP program what
needed to be monitored, might take up part of the max locked memory
limit.  Thus, the xdp_monitor tool have to set the RLIMIT_MEMLOCK to
RLIM_INFINITY, as it cannot determine a more sane limit.

Using the man exit(3) specified EXIT_FAILURE return exit code, and
correct other users too.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Jesper Dangaard Brouer 7 years ago
parent
commit
c4eb7f4643
1 changed files with 9 additions and 2 deletions
  1. 9 2
      samples/bpf/xdp_monitor_user.c

+ 9 - 2
samples/bpf/xdp_monitor_user.c

@@ -20,6 +20,7 @@ static const char *__doc_err_only__=
 #include <unistd.h>
 #include <unistd.h>
 #include <locale.h>
 #include <locale.h>
 
 
+#include <sys/resource.h>
 #include <getopt.h>
 #include <getopt.h>
 #include <net/if.h>
 #include <net/if.h>
 #include <time.h>
 #include <time.h>
@@ -295,6 +296,7 @@ static void print_bpf_prog_info(void)
 
 
 int main(int argc, char **argv)
 int main(int argc, char **argv)
 {
 {
+	struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
 	int longindex = 0, opt;
 	int longindex = 0, opt;
 	int ret = EXIT_SUCCESS;
 	int ret = EXIT_SUCCESS;
 	char bpf_obj_file[256];
 	char bpf_obj_file[256];
@@ -325,13 +327,18 @@ int main(int argc, char **argv)
 		}
 		}
 	}
 	}
 
 
+	if (setrlimit(RLIMIT_MEMLOCK, &r)) {
+		perror("setrlimit(RLIMIT_MEMLOCK)");
+		return EXIT_FAILURE;
+	}
+
 	if (load_bpf_file(bpf_obj_file)) {
 	if (load_bpf_file(bpf_obj_file)) {
 		printf("ERROR - bpf_log_buf: %s", bpf_log_buf);
 		printf("ERROR - bpf_log_buf: %s", bpf_log_buf);
-		return 1;
+		return EXIT_FAILURE;
 	}
 	}
 	if (!prog_fd[0]) {
 	if (!prog_fd[0]) {
 		printf("ERROR - load_bpf_file: %s\n", strerror(errno));
 		printf("ERROR - load_bpf_file: %s\n", strerror(errno));
-		return 1;
+		return EXIT_FAILURE;
 	}
 	}
 
 
 	if (debug) {
 	if (debug) {