[PATCH v7 00/10] mlx5 support for VFIO self test

Alex Williamson alex at shazbot.org
Thu Sep 24 05:56:42 PDT 2026


Leon, can we get your ack on 1-4?  I'll publish an rc1-based branch for
any conflict management.  Thanks,

Alex

On Mon, 21 Sep 2026 19:35:40 -0300
Jason Gunthorpe <jgg at nvidia.com> wrote:

> Add an mlx5 driver to VFIO self test. This is largely a remix of the
> existing VFIO mlx5 driver in rdma-core. It uses an RDMA loopback QP
> to issue RDMA WRITE operations which effectively perform memory
> copies using DMA. Since mlx5 has a stable programming ABI this
> should work on devices from CX5 to current HW. The device FW must
> support the QP loopback configuration.
> 
> Also support send_msi by arming completion events of the RDMA WRITE
> to trigger MSI delivery.
> 
> mlx5 device startup is very complex and most of this code is just
> booting the device, with a smaller amount for operating the QP.
> 
> This entire series was coded by Claude Code in about 4 days. It
> used about 4.5M output tokens, 30 individual sessions and 5600 lines
> of AI-generated .md files. I spent an annoying amount of time
> de-slopping and cleaning its work product to make it presentable.
> However, previous VFIO drivers have taken on the order of 1-2
> months to write, so getting one in a week is pretty remarkable.
> 
> For those interested, the flow I used was broadly a prompt sequence
> sort of like:
> 
>  - Hey Claude, go look at the falcon series, VFIO self test, the
>    mlx5 driver, rdma-core and some PDF documentation and make a
>    plan to put mlx5 under the selftest.
>  - Write an rdma-core application using the built-in VFIO provider
>    that can do the required memcpy operations that vfio selftests
>    wants.
>    (This resulted in a 1k loc C file that compiled and ran the
>     first time but had a few bugs related to device programming
>     that the AI resolved.)
>  - Replace the rdma-core components with open-coded versions to
>    create a fully stand-alone program that does the DMA memcpy.
>  - Review and audit the thing.
>  [Pause and de-slop it]
>  - Make it work on a PF too (this is surprisingly hard!).
>  [Move to a kernel tree and copy all the .md files and .c program
>   it made]
>  - Hey Claude, look at all this stuff and make a broad plan to
>    actually build a VFIO self test.
>  - Here is my 1 sentence advice on what each patch should look
>    like, make a detailed plan to make a patch for every one.
>  [Pause and polish the patch plans]
>  - Execute plan X then commit it [pause and de-slop each patch,
>    repeat].
>  [Review and final polish]
> 
> v7:
>  - Fix some compilation problems, kvm and the igb
> v6: https://patch.msgid.link/r/0-v6-8af36cf7b73f+e2-mlx5st_jgg@nvidia.com
>  - Rebase on v7.3-rc3
>  - Correct some minor sashiko remarks
> v5: https://patch.msgid.link/r/0-v5-4cacb99249f6+1b4-mlx5st_jgg@nvidia.com
>  - Rebase on v7.3-rc1
>  - Adjust how region_size is computed to min it to getpagesize()
> v4: https://patch.msgid.link/r/0-v4-021df3fb5a3f+98e-mlx5st_jgg@nvidia.com
>  - Rebase on vfio next, update igb and falcon
>  - Move rounding to iova_allocator_alloc()
>  - Remove arm barrier changes
> v3: https://patch.msgid.link/r/0-v3-76f117ad04f1+28a90-mlx5st_jgg@nvidia.com
>  - Move max into vfio_pci_driver_probe()
>  - Rebase on v7.2-rc3
> v2: https://patch.msgid.link/r/0-v2-72e9640932fd+2c64-mlx5st_jgg@nvidia.com
>  - Rebase on v7.1-rc3, drop falcon patches
>  - dev_dbg checks the format string even in non debug builds
>  - Sort includes
>  - Adjust comments/commit messageas
>  - Use linux/pci_ids.h
>  - Compute the driver.max_memcpy_size the same as mlx5 kernel driver, it
>    should be GBs now on most devices
>  - Put region_size into all drivers instead of allowing 0
> v1: https://patch.msgid.link/r/0-v1-dc5fa250ca1d+3213-mlx5st_jgg@nvidia.com
> 
> Jason Gunthorpe (10):
>   net/mlx5: Add IFC structures for CQE and WQE
>   net/mlx5: Move HW constant groups from device.h/cq.h to mlx5_ifc.h
>   net/mlx5: Extract MLX5_SET/GET macros into mlx5_ifc_macros.h
>   net/mlx5: Add ONCE and MMIO accessor variants to mlx5_ifc_macros.h
>   selftests: Add additional kernel functions to tools/include/
>   vfio: selftests: Allow drivers to specify required region size
>   vfio: selftests: Add dev_dbg
>   vfio: selftests: Add mlx5 driver - HW init and command interface
>   vfio: selftests: Add mlx5 driver - data path and memcpy ops
>   vfio: selftests: mlx5 driver - add send_msi support
> 
>  include/linux/mlx5/cq.h                       |   10 -
>  include/linux/mlx5/device.h                   |  231 +-
>  include/linux/mlx5/mlx5_ifc.h                 |  178 ++
>  include/linux/mlx5/mlx5_ifc_macros.h          |  185 ++
>  tools/arch/arm64/include/asm/barrier.h        |    4 +
>  tools/arch/x86/include/asm/barrier.h          |    5 +
>  tools/include/asm-generic/io.h                |   28 +
>  tools/include/asm/barrier.h                   |    8 +
>  tools/include/linux/stddef.h                  |   10 +
>  .../selftests/kvm/include/arm64/processor.h   |    4 +-
>  tools/testing/selftests/kvm/irq_test.c        |    2 -
>  .../selftests/vfio/lib/drivers/dsa/dsa.c      |    1 +
>  .../selftests/vfio/lib/drivers/igb/igb.c      |    1 +
>  .../selftests/vfio/lib/drivers/ioat/ioat.c    |    1 +
>  .../selftests/vfio/lib/drivers/mlx5/mlx5.c    | 1928 +++++++++++++++++
>  .../selftests/vfio/lib/drivers/mlx5/mlx5_hw.h |  114 +
>  .../vfio/lib/drivers/mlx5/mlx5_ifc.h          |    1 +
>  .../vfio/lib/drivers/mlx5/mlx5_ifc_fpga.h     |    1 +
>  .../vfio/lib/drivers/mlx5/mlx5_ifc_macros.h   |    1 +
>  .../vfio/lib/drivers/nv_falcon/nv_falcon.c    |    1 +
>  .../lib/include/libvfio/vfio_pci_device.h     |   11 +
>  .../lib/include/libvfio/vfio_pci_driver.h     |    6 +
>  .../selftests/vfio/lib/iova_allocator.c       |    7 +-
>  tools/testing/selftests/vfio/lib/libvfio.mk   |    1 +
>  .../selftests/vfio/lib/vfio_pci_driver.c      |    6 +
>  .../selftests/vfio/vfio_pci_driver_test.c     |    3 +-
>  26 files changed, 2502 insertions(+), 246 deletions(-)
>  create mode 100644 include/linux/mlx5/mlx5_ifc_macros.h
>  create mode 100644 tools/include/linux/stddef.h
>  create mode 100644 tools/testing/selftests/vfio/lib/drivers/mlx5/mlx5.c
>  create mode 100644 tools/testing/selftests/vfio/lib/drivers/mlx5/mlx5_hw.h
>  create mode 120000 tools/testing/selftests/vfio/lib/drivers/mlx5/mlx5_ifc.h
>  create mode 120000 tools/testing/selftests/vfio/lib/drivers/mlx5/mlx5_ifc_fpga.h
>  create mode 120000 tools/testing/selftests/vfio/lib/drivers/mlx5/mlx5_ifc_macros.h
> 
> 
> base-commit: fd73f4a6659897191fa0d40695fe370925dd3780




More information about the linux-arm-kernel mailing list