The series contains an implement of a vfio-user client in QEMU, along with a few more preparatory patches.
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. A functional test is still pending. A previous version of this series can be found at https://lore.kernel.org/qemu-devel/20250607001056.335310-1-john.le...@nutanix.com/ Changes since last series: - the vfio-user client is now enabled by default, the configure option has been removed - the documentation has been relocated next to vhost-user's - SocketAddress is now used for the command line parameter - small bits of code review feedback John Levon (18): 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_MAP/UNMAP vfio-user: implement VFIO_USER_DMA_READ/WRITE vfio-user: add 'x-msg-timeout' option vfio-user: support posted writes vfio-user: add coalesced posted writes docs: add vfio-user documentation Thanos Makatos (1): vfio-user: introduce vfio-user protocol specification MAINTAINERS | 11 +- docs/interop/index.rst | 1 + docs/interop/vfio-user.rst | 1518 +++++++++++++++++++++++++ docs/system/device-emulation.rst | 1 + docs/system/devices/vfio-user.rst | 24 + meson.build | 1 + hw/vfio-user/container.h | 23 + hw/vfio-user/device.h | 24 + hw/vfio-user/protocol.h | 242 ++++ hw/vfio-user/proxy.h | 134 +++ hw/vfio-user/trace.h | 1 + hw/vfio/pci.h | 1 + include/hw/vfio/vfio-container-base.h | 1 + include/hw/vfio/vfio-device.h | 2 + hw/vfio-user/container.c | 345 ++++++ hw/vfio-user/device.c | 387 +++++++ hw/vfio-user/pci.c | 475 ++++++++ hw/vfio-user/proxy.c | 1311 +++++++++++++++++++++ hw/Kconfig | 1 + hw/meson.build | 1 + hw/vfio-user/Kconfig | 5 + hw/vfio-user/meson.build | 9 + hw/vfio-user/trace-events | 18 + 23 files changed, 4535 insertions(+), 1 deletion(-) create mode 100644 docs/interop/vfio-user.rst create mode 100644 docs/system/devices/vfio-user.rst create mode 100644 hw/vfio-user/container.h create mode 100644 hw/vfio-user/device.h create mode 100644 hw/vfio-user/protocol.h create mode 100644 hw/vfio-user/proxy.h create mode 100644 hw/vfio-user/trace.h create mode 100644 hw/vfio-user/container.c create mode 100644 hw/vfio-user/device.c create mode 100644 hw/vfio-user/pci.c create mode 100644 hw/vfio-user/proxy.c create mode 100644 hw/vfio-user/Kconfig create mode 100644 hw/vfio-user/meson.build create mode 100644 hw/vfio-user/trace-events -- 2.43.0