qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v1 00/24] vfio-user client


From: Cédric Le Goater
Subject: Re: [PATCH v1 00/24] vfio-user client
Date: Fri, 16 Dec 2022 12:31:18 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1

On 11/9/22 00:13, John Johnson wrote:

Hello,

This is the 6th revision of the vfio-user client implementation.
It is the first patch series (the previous revisions were RFCs)

First of all, thank you for your time reviewing the RFC versions.

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.

The libvfio-user project (https://github.com/nutanix/libvfio-user)
can be used by a remote process to handle the protocol to implement the third 
part.
We also have upstreamed a patch series that implement a server using QEMU.


Thanks for this contribution,


This is a large and complex framework which looks quite mature. QEMU
would need implementations of remote devices under contrib/, provided
as examples for the QEMU crowd. These are important to show possible
use cases and also, they could possibly be run for non regression tests
done by maintainers and distros. e1000e is quite popular, it would
be a good target. It could be a simpler device to start with, but we
would need to cover the basic features, INTx, MSI, DMA, etc. when time
permits. There are samples under libvfio-user and I wonder how we
could leverage them.

Unit tests under /tests would be (really) good to have. These would be
run by CI. Yes, this is a lot of work :/ but very important for QEMU
stability.

The "socket" name property is not the preferred way in QEMU to define
a remote peer to contact. Is there a possibility to use the chardev
interface in some simple way ? I am thinking about the command line
interface and the integration with libvirt.

More code should be isolated under the *user.c file, even if that
means exporting definitions of routines which are local today. I don't
think the #ifdef CONFIG_VIO_USER in the vfio files are something we
will want to merge.

Some renaming to be done, like Kern -> Kernel, etc. nothing major.

I am not convinced that the macros hiding the VFIO backend IO ops are
useful. I even recall some places where the vfio-user implemented
handler could be called directly without calling the top routine first.
Anyhow, it would be better to be explicit, the macros don't add much.

There is a lot of code duplication for the IOMMU support. Did you
consider implementing a VFIOGroup class to share the common behaviour ?
May be too early, but this is certainly something to keep in mind.

The msg recycling feature looks nice but isn't it an optimization ?

More globally speaking, for what kind of crazy setup this feature could
help us with ? I was wondering if you had tried to implement a remote
device or bridge in another QEMU process, for instance.

Thanks,

C.



Contributors:

John G Johnson <john.g.johnson@oracle.com>
John Levon <john.levon@nutanix.com>
Thanos Makatos <thanos.makatos@nutanix.com>
Elena Ufimtseva <elena.ufimtseva@oracle.com>
Jagannathan Raman <jag.raman@oracle.com>

John Johnson (23):
   vfio-user: add VFIO base abstract class
   vfio-user: add container IO ops vector
   vfio-user: add region cache
   vfio-user: add device IO ops vector
   vfio-user: Define type vfio_user_pci_dev_info
   vfio-user: connect vfio proxy to remote server
   vfio-user: define socket receive functions
   vfio-user: define socket send functions
   vfio-user: get device info
   vfio-user: get region info
   vfio-user: region read/write
   vfio-user: pci_user_realize PCI setup
   vfio-user: get and set IRQs
   vfio-user: forward msix BAR accesses to server
   vfio-user: proxy container connect/disconnect
   vfio-user: dma map/unmap operations
   vfio-user: add dma_unmap_all
   vfio-user: secure DMA support
   vfio-user: dma read/write operations
   vfio-user: pci reset
   vfio-user: add 'x-msg-timeout' option that specifies msg wait times
   vfio-user: add coalesced posted writes
   vfio-user: add trace points

Thanos Makatos (1):
   vfio-user: introduce vfio-user protocol specification

  MAINTAINERS                    |   11 +
  docs/devel/index-internals.rst |    1 +
  docs/devel/vfio-user.rst       | 1522 ++++++++++++++++++++++++++++++++
  hw/vfio/Kconfig                |   10 +
  hw/vfio/ap.c                   |    1 +
  hw/vfio/ccw.c                  |    7 +-
  hw/vfio/common.c               |  648 ++++++++++++--
  hw/vfio/igd.c                  |   23 +-
  hw/vfio/meson.build            |    1 +
  hw/vfio/migration.c            |    2 -
  hw/vfio/pci-quirks.c           |   19 +-
  hw/vfio/pci.c                  |  926 ++++++++++++++-----
  hw/vfio/pci.h                  |   29 +-
  hw/vfio/platform.c             |    2 +
  hw/vfio/trace-events           |   15 +
  hw/vfio/user-protocol.h        |  244 +++++
  hw/vfio/user.c                 | 1904 ++++++++++++++++++++++++++++++++++++++++
  hw/vfio/user.h                 |  112 +++
  include/hw/vfio/vfio-common.h  |   82 ++
  19 files changed, 5230 insertions(+), 329 deletions(-)
  create mode 100644 docs/devel/vfio-user.rst
  create mode 100644 hw/vfio/user-protocol.h
  create mode 100644 hw/vfio/user.c
  create mode 100644 hw/vfio/user.h





reply via email to

[Prev in Thread] Current Thread [Next in Thread]