[PATCH v4 0/4] af_packet correctness, performance, cksum
scott.k.mitch1 at gmail.com
scott.k.mitch1 at gmail.com
Mon Feb 2 09:14:52 CET 2026
From: Scott <scott.k.mitch1 at gmail.com>
This series fixes critical thread safety bugs in the af_packet PMD
and adds performance optimizations.
Patch 1 fixes two major correctness issues:
- Thread safety: tp_status was accessed without memory barriers,
violating the kernel's PACKET_MMAP protocol. On aarch64 and other
weakly-ordered architectures, this causes packet corruption due to
missing memory ordering. The fix matches the kernel's memory model:
volatile unaligned reads/writes with explicit rte_smp_rmb/wmb
barriers and __may_alias__ protection.
- Frame calculations: Fixed incorrect frame overhead and address
calculations that caused memory corruption when frames don't evenly
divide blocks.
Patches 2-4 add performance improvements:
- Patch 2: Bulk mbuf freeing, unlikely annotations, and prefetching
- Patch 3: TX poll control to reduce syscall overhead
- Patch 4: Software checksum offload support with shared rte_net
utility
v4 changes:
- Remove prefetch (perf results didn't show benefit)
- Fix variable sytle for consistency (declare at start of method)
- Add release notes for af_packet and documentation for fixes
v3 changes:
- Patch 4: Fix compile error due to implict cast with c++ compiler
v2 changes:
- Patch 1: Rewrote to use volatile + barriers instead of C11 atomics
to match kernel's memory model. Added dependency on patch-160274
for __rte_may_alias attribute.
- Patch 4: Refactored to use shared rte_net_ip_udptcp_cksum_mbuf()
utility function, eliminating code duplication with tap driver.
Scott Mitchell (4):
net/af_packet: fix thread safety and frame calculations
net/af_packet: RX/TX bulk free, unlikely hint
net/af_packet: tx poll control
net/af_packet: add software checksum offload support
doc/guides/nics/af_packet.rst | 6 +-
doc/guides/nics/features/afpacket.ini | 2 +
doc/guides/rel_notes/release_26_03.rst | 7 +
drivers/net/af_packet/rte_eth_af_packet.c | 236 +++++++++++++++-------
drivers/net/tap/rte_eth_tap.c | 61 +-----
lib/net/rte_net.h | 92 +++++++++
6 files changed, 274 insertions(+), 130 deletions(-)
--
2.39.5 (Apple Git-154)
More information about the dev
mailing list