From: Marat Khalili <qm2k21@gmail.com>
Cc: dev@dpdk.org, stephen@networkplumber.org,
Marat Khalili <qm2k21@gmail.com>
Subject: [PATCH 0/9] bpf: clean up and document ethdev callback synchronization
Date: Sun, 11 Oct 2026 18:21:48 +0000 [thread overview]
Message-ID: <20261011182158.124246-1-qm2k21@gmail.com> (raw)
The DPDK BPF library provides mechanisms to attach BPF programs to
ethdev Rx/Tx callbacks (rte_bpf_eth_rx_elf_load and
rte_bpf_eth_tx_elf_load). Safe unloading of these callbacks relies on
a synchronization protocol between the control plane and datapath
threads, built upon the assumption that each port/queue callback is
serviced by at most one datapath thread.
This patch series improves the documentation, safety, and implementation
of the callback synchronization mechanism:
1. Documentation:
- Add an ASCII sequence diagram and comprehensive documentation in
bpf_pkt.c explaining the synchronization protocol between the
control plane and datapath during callback unload.
- Document the single-thread-per-queue datapath requirement in
public API headers.
2. Safety and Validation:
- Enforce the single-threaded datapath assumption by rejecting Tx
callback installation when the device advertises
RTE_ETH_TX_OFFLOAD_MT_LOCKFREE.
- Add a new flag (RTE_BPF_ETH_F_SKIP_MT_CHECK) allowing applications
to override this check when application architecture guarantees
thread exclusivity.
- Add automated unit test test_bpf_elf_tx_mt_lockfree.
3. Synchronization Cleanups:
- Remove a redundant control plane memory barrier (rte_smp_mb) on
callback unload.
- Simplify datapath inuse tracking (cbi->use) from an even/odd
counter to a simple boolean flag (0 and 1), simplifying
bpf_eth_cbi_wait().
- Switch cbi->use stores to explicit rte_atomic_store_explicit() with
relaxed memory order, avoiding implicit seq_cst operations in C11.
- Make cbi->cb atomic with relaxed atomic load/store operations,
eliminating C11 data-race undefined behavior while compiling to
identical machine code, and making it self-evident that cb is an
integral part of the synchronization mechanism on par with use.
Note that a full rework of the synchronization protocol (e.g. replacing
standalone memory barriers entirely with acquire/release semantics
across variables) was intentionally avoided to keep each commit simple,
localized, and non-controversial. More substantial architectural
changes, such as that or extending the library to support concurrent
multi-threaded dataplane execution, can be cleanly built on top of this
work in the future.
Marat Khalili (9):
bpf: document packet callback unload sequence
bpf: document ethdev callback threading limitations
bpf: reject Tx callback installation with MT_LOCKFREE
bpf: add callback flag to skip multi-thread check
bpf: remove redundant memory barrier on unload
bpf: simplify callback inuse tracking to boolean flag
bpf: reformat packet callback unload diagram
bpf: use relaxed stores for callback inuse tracking
bpf: make callback handle atomic with relaxed access
app/test/test_bpf.c | 123 ++++++++++++++++++++++++++++
lib/bpf/bpf_pkt.c | 172 +++++++++++++++++++++++++++++++--------
lib/bpf/rte_bpf_ethdev.h | 11 ++-
3 files changed, 271 insertions(+), 35 deletions(-)
--
2.43.0
next reply other threads:[~2026-10-11 18:22 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-11 18:21 Marat Khalili [this message]
2026-10-11 18:21 ` [PATCH 1/9] bpf: document packet callback unload sequence Marat Khalili
2026-10-11 18:21 ` [PATCH 2/9] bpf: document ethdev callback threading limitations Marat Khalili
2026-10-11 18:21 ` [PATCH 3/9] bpf: reject Tx callback installation with MT_LOCKFREE Marat Khalili
2026-10-11 18:21 ` [PATCH 4/9] bpf: add callback flag to skip multi-thread check Marat Khalili
2026-10-11 19:48 ` Stephen Hemminger
2026-10-11 20:12 ` Marat Khalili
2026-10-11 18:21 ` [PATCH 5/9] bpf: remove redundant memory barrier on unload Marat Khalili
2026-10-11 19:50 ` Stephen Hemminger
2026-10-11 20:14 ` Marat Khalili
2026-10-11 18:21 ` [PATCH 6/9] bpf: simplify callback inuse tracking to boolean flag Marat Khalili
2026-10-11 19:51 ` Stephen Hemminger
2026-10-11 20:17 ` Marat Khalili
2026-10-11 18:21 ` [PATCH 7/9] bpf: reformat packet callback unload diagram Marat Khalili
2026-10-11 18:21 ` [PATCH 8/9] bpf: use relaxed stores for callback inuse tracking Marat Khalili
2026-10-11 19:52 ` Stephen Hemminger
2026-10-11 20:24 ` Marat Khalili
2026-10-11 18:21 ` [PATCH 9/9] bpf: make callback handle atomic with relaxed access Marat Khalili
2026-10-11 19:54 ` Stephen Hemminger
2026-10-11 20:31 ` Marat Khalili
2026-10-11 20:29 ` [RFC] bpf: fix callback unload with concurrent Tx burst Stephen Hemminger
2026-10-12 21:09 ` [PATCH v2 0/9] bpf: clean up and document ethdev callback synchronization Marat Khalili
2026-10-12 21:09 ` [PATCH v2 1/9] bpf: document packet callback unload sequence Marat Khalili
2026-10-12 21:09 ` [PATCH v2 2/9] bpf: document ethdev callback threading limitations Marat Khalili
2026-10-12 21:44 ` Stephen Hemminger
2026-10-12 21:09 ` [PATCH v2 3/9] bpf: reject Tx callback installation with MT_LOCKFREE Marat Khalili
2026-10-12 21:09 ` [PATCH v2 4/9] bpf: remove redundant memory barrier on unload Marat Khalili
2026-10-12 21:09 ` [PATCH v2 5/9] bpf: simplify callback inuse tracking to boolean flag Marat Khalili
2026-10-12 21:09 ` [PATCH v2 6/9] bpf: reformat packet callback unload diagram Marat Khalili
2026-10-12 21:09 ` [PATCH v2 7/9] bpf: use relaxed accesses for callback inuse tracking Marat Khalili
2026-10-12 21:09 ` [PATCH v2 8/9] bpf: make callback handle atomic with relaxed access Marat Khalili
2026-10-12 21:09 ` [PATCH v2 9/9] bpf: add callback flag to skip multi-thread check Marat Khalili
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=20261011182158.124246-1-qm2k21@gmail.com \
--to=qm2k21@gmail.com \
--cc=dev@dpdk.org \
--cc=stephen@networkplumber.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.