From: Gabriele Monaco <gmonaco@redhat.com>
To: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>,
Shuah Khan <shuah@kernel.org>,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Gabriele Monaco <gmonaco@redhat.com>
Subject: [PATCH bpf-next] selftsets/bpf: Retry map update on helper_fill_hashmap()
Date: Thu, 11 Jun 2026 17:07:03 +0200 [thread overview]
Message-ID: <20260611150704.95133-1-gmonaco@redhat.com> (raw)
helper_fill_hashmap() is used also on parallel and stress map tests.
Those are consistently failing with ENOMEM on kernels built with
PREEMPT_RT if preallocation is disabled. The failure is transient and
only called by the memory cache refill running in a preemptible
irq_work, which can easily stall in case of contention.
Use a retriable update in those cases to handle transient ENOMEM and
make the test more stable also on PREEMPT_RT.
Also fix the sign of the value printed in case of error (strerror()
expects a positive errno while updates return it negative).
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
tools/testing/selftests/bpf/test_maps.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/bpf/test_maps.c b/tools/testing/selftests/bpf/test_maps.c
index ccc5acd55f..c32da7bd8b 100644
--- a/tools/testing/selftests/bpf/test_maps.c
+++ b/tools/testing/selftests/bpf/test_maps.c
@@ -260,6 +260,16 @@ static void test_hashmap_percpu(unsigned int task, void *data)
close(fd);
}
+#define MAP_RETRIES 20
+
+static bool can_retry(int err)
+{
+ return (err == EAGAIN || err == EBUSY ||
+ ((err == ENOMEM || err == E2BIG) &&
+ map_opts.map_flags == BPF_F_NO_PREALLOC));
+}
+
+
#define VALUE_SIZE 3
static int helper_fill_hashmap(int max_entries)
{
@@ -274,10 +284,11 @@ static int helper_fill_hashmap(int max_entries)
for (i = 0; i < max_entries; i++) {
key = i; value[0] = key;
- ret = bpf_map_update_elem(fd, &key, value, BPF_NOEXIST);
+ ret = map_update_retriable(fd, &key, value, BPF_NOEXIST,
+ MAP_RETRIES, can_retry);
CHECK(ret != 0,
"can't update hashmap",
- "err: %s\n", strerror(ret));
+ "err: %s\n", strerror(-ret));
}
return fd;
@@ -1392,17 +1403,9 @@ static void test_map_stress(void)
#define DO_UPDATE 1
#define DO_DELETE 0
-#define MAP_RETRIES 20
#define MAX_DELAY_US 50000
#define MIN_DELAY_RANGE_US 5000
-static bool can_retry(int err)
-{
- return (err == EAGAIN || err == EBUSY ||
- ((err == ENOMEM || err == E2BIG) &&
- map_opts.map_flags == BPF_F_NO_PREALLOC));
-}
-
int map_update_retriable(int map_fd, const void *key, const void *value, int flags, int attempts,
retry_for_error_fn need_retry)
{
base-commit: 2d3090a8aeb596a26935db0955d46c9a5db5c6ce
--
2.54.0
next reply other threads:[~2026-06-11 15:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-11 15:07 Gabriele Monaco [this message]
2026-06-11 15:22 ` [PATCH bpf-next] selftsets/bpf: Retry map update on helper_fill_hashmap() sashiko-bot
2026-06-11 22:48 ` Emil Tsalapatis
2026-06-15 4:30 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260611150704.95133-1-gmonaco@redhat.com \
--to=gmonaco@redhat.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=memxor@gmail.com \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox