[PATCH v6 00/19] vfio-user server in QEMU

Jagannathan Raman posted 19 patches 2 years, 2 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/cover.1645079934.git.jag.raman@oracle.com
Maintainers: Elena Ufimtseva <elena.ufimtseva@oracle.com>, Darren Kenny <darren.kenny@oracle.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, Eduardo Habkost <eduardo@habkost.net>, Peter Xu <peterx@redhat.com>, Wainer dos Santos Moschetta <wainersm@redhat.com>, Juan Quintela <quintela@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Hanna Reitz <hreitz@redhat.com>, Jagannathan Raman <jag.raman@oracle.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Cleber Rosa <crosa@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Laurent Vivier <lvivier@redhat.com>, John G Johnson <john.g.johnson@oracle.com>, Bandan Das <bsd@redhat.com>, Qiuhao Li <Qiuhao.Li@outlook.com>, Markus Armbruster <armbru@redhat.com>, David Hildenbrand <david@redhat.com>, Alexander Bulekov <alxndr@bu.edu>, Paolo Bonzini <pbonzini@redhat.com>, Beraldo Leal <bleal@redhat.com>, Kevin Wolf <kwolf@redhat.com>, Eric Blake <eblake@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, Thomas Huth <thuth@redhat.com>
There is a newer version of this series
configure                                  |   21 +-
meson.build                                |   44 +-
qapi/misc.json                             |   23 +
qapi/qom.json                              |   20 +-
include/block/block.h                      |    1 +
include/exec/memory.h                      |    3 +
include/hw/pci/pci.h                       |    6 +
include/hw/qdev-core.h                     |   35 +
include/hw/remote/iommu.h                  |   18 +
include/hw/remote/machine.h                |    2 +
include/hw/remote/vfio-user-obj.h          |    6 +
include/migration/vmstate.h                |    2 +
include/sysemu/sysemu.h                    |    4 +
migration/savevm.h                         |    2 +
block.c                                    |    5 +
block/block-backend.c                      |    3 +-
blockdev.c                                 |    2 +-
hw/pci/msi.c                               |   13 +-
hw/pci/msix.c                              |   12 +-
hw/remote/iommu.c                          |   78 ++
hw/remote/machine.c                        |   54 +-
hw/remote/vfio-user-obj.c                  | 1286 ++++++++++++++++++++
migration/savevm.c                         |   89 ++
migration/vmstate.c                        |   19 +
softmmu/physmem.c                          |    4 +-
softmmu/qdev-monitor.c                     |   26 +
softmmu/vl.c                               |   17 +
stubs/defer-backend-init.c                 |    7 +
stubs/vfio-user-obj.c                      |    6 +
tests/qtest/fuzz/generic_fuzz.c            |    9 +-
.gitlab-ci.d/buildtest.yml                 |    2 +
.gitmodules                                |    3 +
Kconfig.host                               |    4 +
MAINTAINERS                                |    7 +
hw/remote/Kconfig                          |    4 +
hw/remote/meson.build                      |    4 +
hw/remote/trace-events                     |   11 +
meson_options.txt                          |    2 +
stubs/meson.build                          |    2 +
subprojects/libvfio-user                   |    1 +
tests/avocado/avocado_qemu/__init__.py     |   14 +-
tests/avocado/vfio-user.py                 |  234 ++++
tests/docker/dockerfiles/centos8.docker    |    2 +
tests/docker/dockerfiles/ubuntu2004.docker |    2 +
44 files changed, 2088 insertions(+), 21 deletions(-)
create mode 100644 include/hw/remote/iommu.h
create mode 100644 include/hw/remote/vfio-user-obj.h
create mode 100644 hw/remote/iommu.c
create mode 100644 hw/remote/vfio-user-obj.c
create mode 100644 stubs/defer-backend-init.c
create mode 100644 stubs/vfio-user-obj.c
create mode 160000 subprojects/libvfio-user
create mode 100644 tests/avocado/vfio-user.py
[PATCH v6 00/19] vfio-user server in QEMU
Posted by Jagannathan Raman 2 years, 2 months ago
Hi,

This is v6 of the server side changes to enable vfio-user in QEMU.

Thank you very much for your feedback for the last revision which
helped to streamline the overall design. We've made the following
changes to this revision:

[PATCH v6 03/19] qdev: unplug blocker for devices
  - removed test which prevented an unplug blocker
    from getting added if migration was in progress
  - added comments to function

[PATCH v6 04/19] remote/machine: add HotplugHandler for remote machine
  - changed commit message prefix from vfio-user to "remote/machine"

[PATCH v6 05/19] remote/machine: add vfio-user property
  - new in this series

[PATCH v6 07/19] vfio-user: define vfio-user-server object
  - fixed typo noted in the review
  - moved error message before setting "o->socket = NULL" in
    vfu_object_set_socket()
  - added "vfio-user=on" to the usage comment at the top of file

[PATCH v6 08/19] vfio-user: instantiate vfio-user context
  - added error message to the object set property message when
    server is already running

[PATCH v6 09/19] vfio-user: find and init PCI device
  - added more detailed error message for device unplug blocker

[PATCH v6 10/19] vfio-user: run vfio-user context
  - send ID of device in VFU_CLIENT_HANGUP instead of path
  - disable FD handler in object finalize

[PATCH v6 12/19] vfio-user: IOMMU support for remote device
  - new in this series

[PATCH v6 13/19] vfio-user: handle DMA mappings
  - Setup IOMMU for remote machine if vfio-user is enabled
  - Map/Unmap the DMA regions in the IOMMU address space in
    dma_register()/dma_unregister() using
    pci_device_iommu_address_space() function

[PATCH v6 14/19] vfio-user: handle PCI BAR accesses
  - vfu_object_bar_rw() - directly access the bar region
    instead of accessing via address_space_rw()
  - register handler for PCI ROM region
  - set read only flags for read only MemoryRegions with
    vfu_setup_region()

[PATCH v6 15/19] vfio-user: handle device interrupts
  - setup separate PCI bus map_irq and set_irq for
    vfio-user during remote machine init
  - index hash table using PCI bud device function numbers

[PATCH v6 16/19] vfio-user: handle device interrupts
  - new in this series

[PATCH v6 17/19] vfio-user: register handlers to facilitate migration
  - enable streaming for migration data instead pre-determining
    the migration data size at boot
  - dropped migrated_devs static variable to track the number of
    devices migrated
  - added helper functions to independently start stop block and
    network devices
  - updated qemu_remote_savevm() to migrate data of all the
    devices under the target device

[PATCH v6 18/19] vfio-user: handle reset of remote device
  - new in this series

[PATCH v6 19/19] vfio-user: avocado tests for vfio-user
  - use QMP command for hotplug instead of HMP command
  - confirm the state of source and destination VMs after migration
  - testing megasas device instead of lsi53c895a as lsi53c895a
    doesn't seem to support IOMMU, which is enabled by default
    on the server

We dropped the following patches from the previous revision:
  - pci: isolated address space for PCI bus
  - pci: create and free isolated PCI buses
  - vfio-user: set qdev bus callbacks for remote machine

We are looking forward to your comments.

Thank you very much!

Jagannathan Raman (19):
  configure, meson: override C compiler for cmake
  tests/avocado: Specify target VM argument to helper routines
  qdev: unplug blocker for devices
  remote/machine: add HotplugHandler for remote machine
  remote/machine: add vfio-user property
  vfio-user: build library
  vfio-user: define vfio-user-server object
  vfio-user: instantiate vfio-user context
  vfio-user: find and init PCI device
  vfio-user: run vfio-user context
  vfio-user: handle PCI config space accesses
  vfio-user: IOMMU support for remote device
  vfio-user: handle DMA mappings
  vfio-user: handle PCI BAR accesses
  vfio-user: handle device interrupts
  softmmu/vl: defer backend init
  vfio-user: register handlers to facilitate migration
  vfio-user: handle reset of remote device
  vfio-user: avocado tests for vfio-user

 configure                                  |   21 +-
 meson.build                                |   44 +-
 qapi/misc.json                             |   23 +
 qapi/qom.json                              |   20 +-
 include/block/block.h                      |    1 +
 include/exec/memory.h                      |    3 +
 include/hw/pci/pci.h                       |    6 +
 include/hw/qdev-core.h                     |   35 +
 include/hw/remote/iommu.h                  |   18 +
 include/hw/remote/machine.h                |    2 +
 include/hw/remote/vfio-user-obj.h          |    6 +
 include/migration/vmstate.h                |    2 +
 include/sysemu/sysemu.h                    |    4 +
 migration/savevm.h                         |    2 +
 block.c                                    |    5 +
 block/block-backend.c                      |    3 +-
 blockdev.c                                 |    2 +-
 hw/pci/msi.c                               |   13 +-
 hw/pci/msix.c                              |   12 +-
 hw/remote/iommu.c                          |   78 ++
 hw/remote/machine.c                        |   54 +-
 hw/remote/vfio-user-obj.c                  | 1286 ++++++++++++++++++++
 migration/savevm.c                         |   89 ++
 migration/vmstate.c                        |   19 +
 softmmu/physmem.c                          |    4 +-
 softmmu/qdev-monitor.c                     |   26 +
 softmmu/vl.c                               |   17 +
 stubs/defer-backend-init.c                 |    7 +
 stubs/vfio-user-obj.c                      |    6 +
 tests/qtest/fuzz/generic_fuzz.c            |    9 +-
 .gitlab-ci.d/buildtest.yml                 |    2 +
 .gitmodules                                |    3 +
 Kconfig.host                               |    4 +
 MAINTAINERS                                |    7 +
 hw/remote/Kconfig                          |    4 +
 hw/remote/meson.build                      |    4 +
 hw/remote/trace-events                     |   11 +
 meson_options.txt                          |    2 +
 stubs/meson.build                          |    2 +
 subprojects/libvfio-user                   |    1 +
 tests/avocado/avocado_qemu/__init__.py     |   14 +-
 tests/avocado/vfio-user.py                 |  234 ++++
 tests/docker/dockerfiles/centos8.docker    |    2 +
 tests/docker/dockerfiles/ubuntu2004.docker |    2 +
 44 files changed, 2088 insertions(+), 21 deletions(-)
 create mode 100644 include/hw/remote/iommu.h
 create mode 100644 include/hw/remote/vfio-user-obj.h
 create mode 100644 hw/remote/iommu.c
 create mode 100644 hw/remote/vfio-user-obj.c
 create mode 100644 stubs/defer-backend-init.c
 create mode 100644 stubs/vfio-user-obj.c
 create mode 160000 subprojects/libvfio-user
 create mode 100644 tests/avocado/vfio-user.py

-- 
2.20.1