John, + Steven,
On 5/15/25 17:43, John Levon wrote:
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 previous version of this series can be found at https://lore.kernel.org/all/7dd34008-e0f1-4eed-a77e-55b1f68fb...@redhat.com/T/ (I've reset the version as it has changed significantly.) thanks john John Levon (25): vfio/container: pass MemoryRegion to DMA operations vfio: move more cleanup into vfio_pci_put_device() vfio: move config space read into vfio_pci_config_setup() vfio: refactor out IRQ signalling setup vfio: enable per-IRQ MSI-X masking vfio: add per-region fd support vfio: mark posted writes in region write callbacks 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 Steve Sistare (1): vfio: return mr from vfio_get_xlat_addr Thanos Makatos (1): vfio-user: introduce vfio-user protocol specification MAINTAINERS | 10 +- docs/devel/index-internals.rst | 1 + docs/devel/vfio-user.rst | 1522 +++++++++++++++++++++++++ docs/system/device-emulation.rst | 1 + docs/system/devices/vfio-user.rst | 24 + meson.build | 1 + hw/vfio-user/container.h | 27 + hw/vfio-user/device.h | 27 + hw/vfio-user/protocol.h | 245 ++++ hw/vfio-user/proxy.h | 137 +++ hw/vfio-user/trace.h | 1 + hw/vfio/pci.h | 16 + include/hw/vfio/vfio-container-base.h | 5 +- include/hw/vfio/vfio-device.h | 15 +- include/hw/vfio/vfio-region.h | 2 + include/system/memory.h | 16 +- hw/vfio-user/container.c | 348 ++++++ hw/vfio-user/device.c | 389 +++++++ hw/vfio-user/pci.c | 428 +++++++ hw/vfio-user/proxy.c | 1314 +++++++++++++++++++++ hw/vfio/container-base.c | 4 +- hw/vfio/container.c | 3 +- hw/vfio/device.c | 57 +- hw/vfio/iommufd.c | 3 +- hw/vfio/listener.c | 35 +- hw/vfio/pci.c | 163 ++- hw/vfio/region.c | 10 +- hw/virtio/vhost-vdpa.c | 8 +- system/memory.c | 25 +- hw/meson.build | 1 + hw/vfio-user/meson.build | 11 + hw/vfio-user/trace-events | 18 + meson_options.txt | 2 + scripts/meson-buildoptions.sh | 4 + 34 files changed, 4753 insertions(+), 120 deletions(-) create mode 100644 docs/devel/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/meson.build create mode 100644 hw/vfio-user/trace-events
patches 3-5 seem be ok to merge. They are first on my vfio-next candidates. patches 1-2 should be reworked on top of the memory_get_xlat_addr() changes [1] proposed by Steven. I haven't looked at patches 6-8 yet. I think I saw some conflicts with the live update proposal from Steven. To be clarified next. The rest (9-27) is vfio-user territory only (I hope). Still, it should be merged through the VFIO tree. Would it be complex to propose a functional test for it ? Thanks, C. [1] https://lore.kernel.org/qemu-devel/1747415599-131553-1-git-send-email-steven.sist...@oracle.com/