Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: test eager BPF ringbuf size adjustment logic

Add test validating that libbpf adjusts (and reflects adjusted) ringbuf
size early, before bpf_object is loaded. Also make sure we can't
successfully resize ringbuf map after bpf_object is loaded.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20220715230952.2219271-2-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Andrii Nakryiko and committed by
Alexei Starovoitov
e1346019 597fbc46

+11
+11
tools/testing/selftests/bpf/prog_tests/ringbuf_multi.c
··· 50 50 if (CHECK(!skel, "skel_open", "skeleton open failed\n")) 51 51 return; 52 52 53 + /* validate ringbuf size adjustment logic */ 54 + ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), page_size, "rb1_size_before"); 55 + ASSERT_OK(bpf_map__set_max_entries(skel->maps.ringbuf1, page_size + 1), "rb1_resize"); 56 + ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), 2 * page_size, "rb1_size_after"); 57 + ASSERT_OK(bpf_map__set_max_entries(skel->maps.ringbuf1, page_size), "rb1_reset"); 58 + ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), page_size, "rb1_size_final"); 59 + 53 60 proto_fd = bpf_map_create(BPF_MAP_TYPE_RINGBUF, NULL, 0, 0, page_size, NULL); 54 61 if (CHECK(proto_fd < 0, "bpf_map_create", "bpf_map_create failed\n")) 55 62 goto cleanup; ··· 71 64 72 65 close(proto_fd); 73 66 proto_fd = -1; 67 + 68 + /* make sure we can't resize ringbuf after object load */ 69 + if (!ASSERT_ERR(bpf_map__set_max_entries(skel->maps.ringbuf1, 3 * page_size), "rb1_resize_after_load")) 70 + goto cleanup; 74 71 75 72 /* only trigger BPF program for current process */ 76 73 skel->bss->pid = getpid();