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

