From: Kumar Kartikeya Dwivedi <memxor@gmail.com>
To: bpf@vger.kernel.org
Cc: Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Martin KaFai Lau <martin.lau@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>, Tejun Heo <tj@kernel.org>,
Emil Tsalapatis <emil@etsalapatis.com>,
Barret Rhoden <brho@google.com>, Josh Don <joshdon@google.com>,
Dohyun Kim <dohyunkim@google.com>,
kkd@meta.com, kernel-team@meta.com
Subject: [PATCH bpf-next v3 0/3] Arena Spin Lock
Date: Tue, 4 Mar 2025 17:18:46 -0800 [thread overview]
Message-ID: <20250305011849.1168917-1-memxor@gmail.com> (raw)
This set provides an implementation of queued spin lock for arena.
There is no support for resiliency and recovering from deadlocks yet.
We will wait for the rqspinlock patch set to land before incorporating
support.
One minor change compared to the qspinlock algorithm in the kernel is
that we don't have the trylock fallback when nesting count exceeds 4.
The maximum number of supported CPUs is 1024, but this can be increased
in the future if necessary.
The API supports returning an error, so resiliency support can be added
in the future. Callers are still expected to check for and handle any
potential errors.
Errors are returned when the spin loops time out, when the number of
CPUs is greater than 1024, or when the extreme edge case of NMI
interrupting NMI interrupting HardIRQ interrupting SoftIRQ task, all of
them simultaneously in slow path, occurs, which is unsupported.
Changelog:
----------
v2 -> v3
v2: https://lore.kernel.org/bpf/20250118162238.2621311-1-memxor@gmail.com
* Rename to arena_spin_lock
* Introduce cond_break_label macro to jump to label from cond_break.
* Drop trylock fallback when nesting count exceeds 4.
* Fix bug in try_cmpxchg implementation.
* Add tests with critical sections of varying lengths.
* Add comments for _Generic trick to drop __arena tag.
* Fix bug due to qnodes being placed on first page, leading to CPU 0's
node being indistinguishable from NULL.
v1 -> v2
v1: https://lore.kernel.org/bpf/20250117223754.1020174-1-memxor@gmail.com
* Fix definition of lock in selftest
Kumar Kartikeya Dwivedi (3):
selftests/bpf: Introduce cond_break_label
selftests/bpf: Introduce arena spin lock
selftests/bpf: Add tests for arena spin lock
.../selftests/bpf/bpf_arena_spin_lock.h | 505 ++++++++++++++++++
tools/testing/selftests/bpf/bpf_atomic.h | 132 +++++
.../testing/selftests/bpf/bpf_experimental.h | 15 +-
.../bpf/prog_tests/arena_spin_lock.c | 102 ++++
.../selftests/bpf/progs/arena_spin_lock.c | 51 ++
5 files changed, 799 insertions(+), 6 deletions(-)
create mode 100644 tools/testing/selftests/bpf/bpf_arena_spin_lock.h
create mode 100644 tools/testing/selftests/bpf/bpf_atomic.h
create mode 100644 tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c
create mode 100644 tools/testing/selftests/bpf/progs/arena_spin_lock.c
base-commit: 42ba8a49d085e0c2ad50fb9a8ec954c9762b6e01
--
2.47.1
next reply other threads:[~2025-03-05 1:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-05 1:18 Kumar Kartikeya Dwivedi [this message]
2025-03-05 1:18 ` [PATCH bpf-next v3 1/3] selftests/bpf: Introduce cond_break_label Kumar Kartikeya Dwivedi
2025-03-05 1:18 ` [PATCH bpf-next v3 2/3] selftests/bpf: Introduce arena spin lock Kumar Kartikeya Dwivedi
2025-03-05 2:27 ` Alexei Starovoitov
2025-03-05 3:14 ` Kumar Kartikeya Dwivedi
2025-03-05 3:40 ` Alexei Starovoitov
2025-03-05 4:28 ` Kumar Kartikeya Dwivedi
2025-03-05 1:18 ` [PATCH bpf-next v3 3/3] selftests/bpf: Add tests for " Kumar Kartikeya Dwivedi
2025-03-05 2:03 ` Alexei Starovoitov
2025-03-05 2:14 ` Kumar Kartikeya Dwivedi
2025-03-05 2:24 ` Kumar Kartikeya Dwivedi
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=20250305011849.1168917-1-memxor@gmail.com \
--to=memxor@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brho@google.com \
--cc=daniel@iogearbox.net \
--cc=dohyunkim@google.com \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=joshdon@google.com \
--cc=kernel-team@meta.com \
--cc=kkd@meta.com \
--cc=martin.lau@kernel.org \
--cc=tj@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