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