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



Reply via email to