Commit 7a85e4df authored by Yauheni Kaliuta's avatar Yauheni Kaliuta Committed by Andrii Nakryiko

selftests/bpf: Pass page size from userspace in map_ptr

Use ASSERT to check result but keep CHECK where format was used to
report error.

Use bpf_map__set_max_entries() to set map size dynamically from
userspace according to page size.

Zero-initialize the variable in bpf prog, otherwise it will cause
problems on some versions of Clang.
Signed-off-by: default avatarYauheni Kaliuta <yauheni.kaliuta@redhat.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210408061310.95877-4-yauheni.kaliuta@redhat.com
parent 361d3202
...@@ -12,11 +12,22 @@ void test_map_ptr(void) ...@@ -12,11 +12,22 @@ void test_map_ptr(void)
__u32 duration = 0, retval; __u32 duration = 0, retval;
char buf[128]; char buf[128];
int err; int err;
int page_size = getpagesize();
skel = map_ptr_kern__open_and_load(); skel = map_ptr_kern__open();
if (CHECK(!skel, "skel_open_load", "open_load failed\n")) if (!ASSERT_OK_PTR(skel, "skel_open"))
return; return;
err = bpf_map__set_max_entries(skel->maps.m_ringbuf, page_size);
if (!ASSERT_OK(err, "bpf_map__set_max_entries"))
goto cleanup;
err = map_ptr_kern__load(skel);
if (!ASSERT_OK(err, "skel_load"))
goto cleanup;
skel->bss->page_size = page_size;
err = bpf_prog_test_run(bpf_program__fd(skel->progs.cg_skb), 1, &pkt_v4, err = bpf_prog_test_run(bpf_program__fd(skel->progs.cg_skb), 1, &pkt_v4,
sizeof(pkt_v4), buf, NULL, &retval, NULL); sizeof(pkt_v4), buf, NULL, &retval, NULL);
......
...@@ -12,6 +12,7 @@ _Static_assert(MAX_ENTRIES < LOOP_BOUND, "MAX_ENTRIES must be < LOOP_BOUND"); ...@@ -12,6 +12,7 @@ _Static_assert(MAX_ENTRIES < LOOP_BOUND, "MAX_ENTRIES must be < LOOP_BOUND");
enum bpf_map_type g_map_type = BPF_MAP_TYPE_UNSPEC; enum bpf_map_type g_map_type = BPF_MAP_TYPE_UNSPEC;
__u32 g_line = 0; __u32 g_line = 0;
int page_size = 0; /* userspace should set it */
#define VERIFY_TYPE(type, func) ({ \ #define VERIFY_TYPE(type, func) ({ \
g_map_type = type; \ g_map_type = type; \
...@@ -635,7 +636,6 @@ struct bpf_ringbuf_map { ...@@ -635,7 +636,6 @@ struct bpf_ringbuf_map {
struct { struct {
__uint(type, BPF_MAP_TYPE_RINGBUF); __uint(type, BPF_MAP_TYPE_RINGBUF);
__uint(max_entries, 1 << 12);
} m_ringbuf SEC(".maps"); } m_ringbuf SEC(".maps");
static inline int check_ringbuf(void) static inline int check_ringbuf(void)
...@@ -643,7 +643,7 @@ static inline int check_ringbuf(void) ...@@ -643,7 +643,7 @@ static inline int check_ringbuf(void)
struct bpf_ringbuf_map *ringbuf = (struct bpf_ringbuf_map *)&m_ringbuf; struct bpf_ringbuf_map *ringbuf = (struct bpf_ringbuf_map *)&m_ringbuf;
struct bpf_map *map = (struct bpf_map *)&m_ringbuf; struct bpf_map *map = (struct bpf_map *)&m_ringbuf;
VERIFY(check(&ringbuf->map, map, 0, 0, 1 << 12)); VERIFY(check(&ringbuf->map, map, 0, 0, page_size));
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment