Re: [PATCH v10 0/3] vfio: selftests: Add driver for Intel Ethernet Gigabit Controller (IGB)

From: Alex Williamson

Date: Wed Aug 05 2026 - 11:48:22 EST


On Wed, 05 Aug 2026 00:20:57 +0000
Josh Hilke <jrhilke@xxxxxxxxxx> wrote:

> This v10 of a series which adds a VFIO selftest driver for the Intel
> Gigabit Ethernet controller (IGB), specifically targeting the 82576
> device. IGB is fully virtualized in QEMU, making it suitable for running
> VFIO selftests without specialized hardware.

LGTM, passes on physical NIC. Thanks for the re-spins.

David, do you want to double check and provide an Ack? Thanks,

Alex


> v9: https://lore.kernel.org/kvm/20260730-igb_v3_b4-v9-0-9e4d8682437e@xxxxxxxxxx/
>
> Version 10 adds an assert in the IGB driver to prevent DMA transfers
> smaller than 60 bytes, avoiding out-of-bounds DMA writes caused by
> hardware padding on short transfers, and squashes the recovery logic
> (previously Patch 5) into the main driver patch to keep the driver
> self-contained. Also add some logic from Alex to correct the ordering of
> Tx/Rx queue setup.
>
> This series applies on top of linux-next, but the VFIO selftests don't
> build without this patch which fixes a compile error for the test
> fixture:
> https://lore.kernel.org/linux-kselftest/20260630213341.1664345-1-dmatlack@xxxxxxxxxx/
>
> Testing
> =======
> - VFIO selftests builds clean at every commit
> - vfio_pci_driver_test passes using IGB driver + QEMU. Use the following
> command to run the tests:
>
> vng \
> --run arch/x86/boot/bzImage \
> --user root \
> --disable-microvm \
> --memory 32G \
> --cpus 8 \
> --qemu-opts="-M q35,accel=kvm,kernel-irqchip=split" \
> --qemu-opts="-device intel-iommu,intremap=on,caching-mode=on,device-iotlb=on" \
> --qemu-opts="-netdev user,id=net0 -device igb,netdev=net0,addr=09.0" \
> --append "console=ttyS0 earlyprintk=ttyS0 intel_iommu=on iommu=pt" \
> --exec "modprobe vfio-pci && \
> ./tools/testing/selftests/vfio/scripts/setup.sh 0000:00:09.0 && \
> ./tools/testing/selftests/vfio/scripts/run.sh ./tools/testing/selftests/vfio/vfio_pci_driver_test"
> --------
> Changelog:
>
> v9 -> v10:
> - Add assert in IGB driver to prevent DMA transfers < 60 bytes (Ethernet
> minimum payload size) to avoid memory corruption from hardware padding. (Sashiko)
> - Squash recovery logic into the main driver patch to make the driver self-contained.
> - Set per-queue enable bits _after_ enabling global queue bits (Alex)
>
> v8 -> v9:
> - Enable Pad Short Packets (PSP) in TCTL to support transfers < 60 bytes. (Sashiko)
> - Correct misleading comment about interrupt delivery in Patch 1. (Sashiko)
>
> v7 -> v8:
> - Rebase onto linux-next branch. (Alex)
> - Implement retry limit in vfio_pci_device_reset(). (Alex)
> - Carry David's reviewed-by tag onto the patches that haven't been
> touched since v6.
>
> v6 -> v7:
> - Allow the driver to be used on any architecture. (Alex)
> - Fix regression in reset logic for the physical device. (Alex)
>
> v5 -> v6:
> - Retry on EAGAIN during device reset to handle transient lock contention (Sashiko).
>
> v4 -> v5:
> - Reordered igb_remove() to reset the device before disabling MSI-X (Sashiko)
> - Refactored hardware reset logic into igb_reset() helper.
> - Simplified reset completion check to usleep + assertion instead of retry loop (Sashiko).
> - Allow arbitrary test data by enabling Multicast Promiscuous (MPE)
> and Broadcast Accept (BAM) modes (Sashiko).
> - Fixed igb_send_msi() to use MSIX_VECTOR_MASK instead of magic number (Sashiko).
>
> v3 -> v4
> - Enable MSI-X mode in GPIE (Sashiko)
> - Fix hardware initilization order to avoid race conditions (Alex/Sashiko)
> - Add memory barrier to prevent speculative reads (Alex/Sashiko)
> - Clean up stale references in commit messages and comments (Alex/Sashiko)
> - Add a comment to address software/firmware semaphore (Alex/Sashiko)
>
> v2 -> v3
> - Poll reset bit and document the required wait time (David/Sashiko)
> - Fix the logic for enabling PCI_COMMAND_MEMORY (David/Sashiko)
> - Fail the test if autonegotation fails (David/Sashiko)
> - Handle endianness conversions (David/Sashiko)
> - Use real IGB headers at the start of the series (David)
> - Add E1000_TXD_CMD_IFCS to the TX descriptor command word (Sashiko)
>
> v1 -> v2
> - Removed the chunking loop in igb_memcpy_start() (David)
> - Removed redundant writes to status_error and hdr_addr (David)
> - Include official IGB header files (David)
>
> Signed-off-by: Josh Hilke <jrhilke@xxxxxxxxxx>
> ---
> Alex Williamson (1):
> vfio: selftests: Add helpers to re-enable interrupts
>
> Josh Hilke (2):
> vfio: selftests: igb: Add driver for Intel 82576 device
> vfio: selftests: Retry on EAGAIN during device reset
>
> .../selftests/vfio/lib/drivers/igb/e1000_82575.h | 1 +
> .../selftests/vfio/lib/drivers/igb/e1000_defines.h | 1 +
> .../selftests/vfio/lib/drivers/igb/e1000_regs.h | 1 +
> tools/testing/selftests/vfio/lib/drivers/igb/igb.c | 585 +++++++++++++++++++++
> .../vfio/lib/include/libvfio/vfio_pci_device.h | 15 +
> tools/testing/selftests/vfio/lib/libvfio.mk | 1 +
> tools/testing/selftests/vfio/lib/vfio_pci_device.c | 42 +-
> tools/testing/selftests/vfio/lib/vfio_pci_driver.c | 3 +-
> 8 files changed, 647 insertions(+), 2 deletions(-)
> ---
> base-commit: 0f6da28aab51b16762ed82e8fdeaa5042da45b08
> change-id: 20260707-igb_v3_b4-49194c14373c
>
> Best regards,