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