Commit e1346019 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

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: default avatarAndrii Nakryiko <andrii@kernel.org>
Acked-by: default avatarYonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20220715230952.2219271-2-andrii@kernel.org


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 597fbc46
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -50,6 +50,13 @@ void test_ringbuf_multi(void)
	if (CHECK(!skel, "skel_open", "skeleton open failed\n"))
	if (CHECK(!skel, "skel_open", "skeleton open failed\n"))
		return;
		return;


	/* validate ringbuf size adjustment logic */
	ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), page_size, "rb1_size_before");
	ASSERT_OK(bpf_map__set_max_entries(skel->maps.ringbuf1, page_size + 1), "rb1_resize");
	ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), 2 * page_size, "rb1_size_after");
	ASSERT_OK(bpf_map__set_max_entries(skel->maps.ringbuf1, page_size), "rb1_reset");
	ASSERT_EQ(bpf_map__max_entries(skel->maps.ringbuf1), page_size, "rb1_size_final");

	proto_fd = bpf_map_create(BPF_MAP_TYPE_RINGBUF, NULL, 0, 0, page_size, NULL);
	proto_fd = bpf_map_create(BPF_MAP_TYPE_RINGBUF, NULL, 0, 0, page_size, NULL);
	if (CHECK(proto_fd < 0, "bpf_map_create", "bpf_map_create failed\n"))
	if (CHECK(proto_fd < 0, "bpf_map_create", "bpf_map_create failed\n"))
		goto cleanup;
		goto cleanup;
@@ -65,6 +72,10 @@ void test_ringbuf_multi(void)
	close(proto_fd);
	close(proto_fd);
	proto_fd = -1;
	proto_fd = -1;


	/* make sure we can't resize ringbuf after object load */
	if (!ASSERT_ERR(bpf_map__set_max_entries(skel->maps.ringbuf1, 3 * page_size), "rb1_resize_after_load"))
		goto cleanup;

	/* only trigger BPF program for current process */
	/* only trigger BPF program for current process */
	skel->bss->pid = getpid();
	skel->bss->pid = getpid();