John, +Steven, for the Live upsate series.
On 2/19/25 15:48, John Levon wrote:
This is the 8th revision of the vfio-user client implementation. The vfio-user protocol allows for implementing (PCI) devices in another userspace process; SPDK is one example, which includes a virtual NVMe implementation. The vfio-user framework consists of 3 parts: 1) The VFIO user protocol specification. 2) A client - the VFIO device in QEMU that encapsulates VFIO messages and sends them to the server. 3) A server - a remote process that emulates a device. This patchset implements parts 1 and 2. It has been tested against libvfio-user test servers as well as SPDK. Thanks for previous reviews & comments.
This series is going in the right direction. Thanks for all the changes. However, I will postpone my review for the reasons below. VFIO initial commit in 2012 was a single file adding support for a "vfio-pci" device. Since, the subsystem has changed a lot and it grew to +16K line of code. Over the years, we've had numerous additions, VFIO platform devices, s390x VFIO AP and CCW devices, migration support with dirty tracking, support for different host IOMMU backend devices, multifd, etc. All these additions never took the opportunity to introduce a VFIO interface for external usage and PPC, s390x, migration, backends subsystems happily and randomly peek and poke into it. The subsystem is now a happy jumble of disparate functions, with weak organization and names. The vfio-common.h header file is good example of the result. It's time for a global code reshuffling. I'll take care of it (and I've already started) and this means nothing new (fixes are OK) will be merged before this is done. I hope I have made enough progress before the start of the QEMU 10.1 cycle. There won't be any functional changes, but there will be new files and new function names, so it's probably a real earthquake for your series. Thanks, C.
Changes since v7: - split up pci patches for easier reviewing - fixed lots of device ops error handling - vfio-user code now in hw/vfio-user - improved commit messages - various other small cleanups Jagannathan Raman (20): vfio/container: pass MemoryRegion to DMA operations vfio: add region cache vfio: split out VFIOKernelPCIDevice vfio: add device IO ops vector vfio-user: add vfio-user class and container vfio-user: connect vfio proxy to remote server vfio-user: implement message receive infrastructure vfio-user: implement message send infrastructure vfio-user: implement VFIO_USER_DEVICE_GET_INFO vfio-user: implement VFIO_USER_DEVICE_GET_REGION_INFO vfio-user: implement VFIO_USER_REGION_READ/WRITE vfio-user: set up PCI in vfio_user_pci_realize() vfio-user: implement VFIO_USER_DEVICE_GET/SET_IRQ* vfio-user: forward MSI-X PBA BAR accesses to server vfio-user: set up container access to the proxy vfio-user: implement VFIO_USER_DEVICE_RESET vfio-user: implement VFIO_USER_DMA_READ/WRITE vfio-user: add 'no-direct-dma' option vfio-user: add 'x-msg-timeout' option vfio-user: add coalesced posted writes John Levon (7): vfio/container: pass listener_begin/commit callbacks vfio/container: support VFIO_DMA_UNMAP_FLAG_ALL vfio: add vfio_attach_device_by_iommu_type() vfio: add vfio_prepare_device() vfio: refactor out vfio_interrupt_setup() vfio: refactor out vfio_pci_config_setup() vfio-user: implement VFIO_USER_DMA_MAP/UNMAP Thanos Makatos (1): vfio-user: introduce vfio-user protocol specification MAINTAINERS | 10 +- docs/devel/index-internals.rst | 1 + docs/devel/vfio-user.rst | 1522 ++++++++++++++++++++++ hw/meson.build | 1 + hw/vfio-user/common.c | 1702 +++++++++++++++++++++++++ hw/vfio-user/common.h | 123 ++ hw/vfio-user/container.c | 358 ++++++ hw/vfio-user/container.h | 24 + hw/vfio-user/meson.build | 10 + hw/vfio-user/pci.c | 443 +++++++ hw/vfio-user/protocol.h | 243 ++++ hw/vfio-user/trace-events | 18 + hw/vfio-user/trace.h | 1 + hw/vfio/ap.c | 4 +- hw/vfio/ccw.c | 9 +- hw/vfio/common.c | 137 +- hw/vfio/container-base.c | 8 +- hw/vfio/container.c | 78 +- hw/vfio/helpers.c | 185 ++- hw/vfio/igd.c | 8 +- hw/vfio/iommufd.c | 31 +- hw/vfio/pci.c | 591 +++++---- hw/vfio/pci.h | 34 +- hw/vfio/platform.c | 4 +- hw/virtio/vhost-vdpa.c | 2 +- include/exec/memory.h | 4 +- include/hw/vfio/vfio-common.h | 45 +- include/hw/vfio/vfio-container-base.h | 11 +- meson.build | 1 + meson_options.txt | 2 + scripts/meson-buildoptions.sh | 4 + system/memory.c | 7 +- 32 files changed, 5281 insertions(+), 340 deletions(-) create mode 100644 docs/devel/vfio-user.rst create mode 100644 hw/vfio-user/common.c create mode 100644 hw/vfio-user/common.h create mode 100644 hw/vfio-user/container.c create mode 100644 hw/vfio-user/container.h create mode 100644 hw/vfio-user/meson.build create mode 100644 hw/vfio-user/pci.c create mode 100644 hw/vfio-user/protocol.h create mode 100644 hw/vfio-user/trace-events create mode 100644 hw/vfio-user/trace.h