Resending unchanged after subscribing to the mailing lists.

FreeBSD nic_uio currently supplies BAR mappings without interrupt
delivery. This series adds an optional single-vector MSI-X interface and
connects it to the FreeBSD kqueue dispatcher for AdminQ and link events.

The first patch fixes a pre-existing dispatch cleanup bug and is suitable
for stable backport. The second implements the module interface with
serialized IRQ/resource lifetime, writable-only control ioctls, and bus
mastering tied to writable open file descriptions. The third integrates
the interface with EAL. Both EAL and hardware lifecycle tests are included.

The series is based directly on main at c981dcfe134e. Older applications
retain BAR-only operation; older modules remain usable with PMDs that
support polling fallback. The separate iavf polling fix in PR #125 was
present in the hardware-tested application but is not part of this series:
https://github.com/DPDK/dpdk/pull/125

The polling fix was sent first in a separate thread:
Message-ID: <[email protected]>

Validation includes Clang 21/GCC 14 static and shared EAL, PCI and iavf
builds with -Werror; normal and INVARIANTS/WITNESS module builds; and the
FreeBSD interrupt and alarm tests. E810 VF hardware tests on FreeBSD
16-CURRENT cover 300 software interrupts, 60 masked/pending deliveries,
ownership and descriptor lifetime, and three active-traffic SIGKILL cases
including both primary/secondary exit orders. Bus mastering is checked
after the final writer exits; reopening needs no external PCI reset.
Follow-up current-DPDK runs deliver exactly 4,512 frames across 45 queue
restarts and 21 device resets. Older polling-application runs deliver
exactly 2,688 frames across 36 queue restarts.

Checkpatch has no errors. Its eight negative-errno warnings concern
positive errno returns required by FreeBSD cdev methods. Full-tree builds
encounter an existing contigmem SYSCTL_NODE_CHILDREN API mismatch; focused
builds pass. Optional Clang C11 atomics encounter existing EAL type errors;
validation uses the default non-stdatomic configuration.

Scope is one control-event vector, not per-queue Rx, MSI or INTx. There is
no IOMMU isolation or guarantee of draining transactions already issued
before PCI bus mastering is cleared. Hardware coverage is E810/FreeBSD
16-CURRENT.

GitHub review and CI:
https://github.com/DPDK/dpdk/pull/126

Kevin Bowling (3):
  eal/freebsd: fix active interrupt source cleanup
  kernel/freebsd: add single-vector MSI-X support
  eal/freebsd: support UIO MSI-X interrupts

 .mailmap                               |   1 +
 MAINTAINERS                            |   4 +-
 app/test/meson.build                   |   4 +
 app/test/test_interrupts_freebsd.c     | 203 ++++++++++++++
 app/test/test_nic_uio.py               | 140 ++++++++++
 doc/guides/freebsd_gsg/build_dpdk.rst  |  25 ++
 doc/guides/rel_notes/release_26_11.rst |  10 +
 drivers/bus/pci/bsd/pci.c              |   2 +-
 kernel/freebsd/nic_uio/meson.build     |   2 +-
 kernel/freebsd/nic_uio/nic_uio.c       | 364 ++++++++++++++++++++++---
 kernel/freebsd/nic_uio/nic_uio.h       |  33 +++
 lib/eal/freebsd/eal_interrupts.c       |  46 +++-
 lib/eal/freebsd/meson.build            |   2 +
 13 files changed, 787 insertions(+), 49 deletions(-)
 create mode 100644 app/test/test_interrupts_freebsd.c
 create mode 100644 app/test/test_nic_uio.py
 create mode 100644 kernel/freebsd/nic_uio/nic_uio.h


base-commit: c981dcfe134e4c641951ee15a76de0b56aafb05a
-- 
2.56.0

Reply via email to