[PATCH v2 00/21] PCI Multifunction hotplug/hotunplug support

Daniel Henrique Barboza danielhb413 at gmail.com
Thu Jan 30 16:44:12 UTC 2020


This series adds PCI multifunction hotplug/unplug capabilities
for Libvirt. Some of these patches were sent last year in a
shorter prep series in [1]. The patches then got a bit of
rework to keep up with Libvirt changes in master. This
work follows the considerations made for the unplug design
in [2]. A first version of this series were sent back in
2018 [3], so this is the official version 2 of that work.

The design guideline for the patches can be summed up as:

- attach/detach functions were changed to handle a list of
devices instead of a single device definition. The regular
device attach/detach is represented with a list with
size = 1;
 
- common code between single device and multifunction device
mechanics were moved to 'internal' versions of the functions;

- for the 'Live' operations, both attach and detach were
handled in specialized functions for the multifunction case.
The regular case is still being handled by the same
functions.

This allowed us to add the multifunction support without
changing existing regular attach/detach device support.

Attaching/detaching a multifunction device works by supplying
the <devices> XML to the same attach/detach commands we
already use. It is expected to supply the same XML when
detaching the device, as discussed in [2].

Despite the changes and additions I've made, this is still
adherent to the original 2018 series from Shivaprasad G Bhat.


[1] https://www.redhat.com/archives/libvir-list/2019-August/msg01382.html
[2] https://www.redhat.com/archives/libvir-list/2020-January/msg00865.html
[3] https://www.redhat.com/archives/libvir-list/2018-March/msg00729.html


Daniel Henrique Barboza (4):
  utils: PCI multifunction detection helpers
  qemu_hotplug.c: tune unplugTimeout for multifunction detach
  qemu_hotplug: do not hotplug/hotunplug 'unassigned' hostdevs
  qemu_hotplug.c: use enhanced multifunction unplug if available

Shivaprasad G Bhat (17):
  qemu: address: Separate the slots into multiple aggregates
  virhostdev: Introduce virHostdevPCIDevicesBelongToSameSlot
  qemu: address: Enable auto addressing multifunction cards
  conf: qemu: validate multifunction hostdevice domain configs
  conf: Add helper to get active functions of a slot of domain
  qemu: hostdev: Move the hostdev preparation to a separate function
  qemu: hotplug: Move the detach of PCI device to the beginning of live
    hotplug
  qemu: hotplug: move assignment outside qemuDomainAttachHostPCIDevice
  Introduce virDomainDeviceDefParseXMLMany
  Introduce qemuDomainDeviceParseXMLMany
  qemu: refactor qemuDomain[Attach|Detach]DeviceConfig
  qemu: refactor qemuDomain[Attach|Detach]DeviceLive
  qemu: hotplug: Queue and wait for multiple devices
  domain: addr: Introduce virDomainPCIAddressEnsureMultifunctionAddress
  qemu: hotplug: Implement multifunction device hotplug
  qemu: hotplug: Prevent updates to multifunction device
  qemu: hotplug: Implement multifunction device unplug

 src/conf/device_conf.h                        |   7 +
 src/conf/domain_addr.c                        | 129 ++++-
 src/conf/domain_addr.h                        |  43 +-
 src/conf/domain_conf.c                        | 198 +++++++-
 src/conf/domain_conf.h                        |  35 ++
 src/libvirt_private.syms                      |  10 +
 src/qemu/qemu_domain.c                        |  73 +++
 src/qemu/qemu_domain.h                        |  21 +-
 src/qemu/qemu_domain_address.c                | 366 ++++++++++++++-
 src/qemu/qemu_domain_address.h                |  16 +
 src/qemu/qemu_driver.c                        | 242 +++++++---
 src/qemu/qemu_hotplug.c                       | 440 +++++++++++++++---
 src/qemu/qemu_hotplug.h                       |  14 +
 src/util/virhostdev.c                         |  54 +++
 src/util/virhostdev.h                         |   5 +
 src/util/virpci.c                             |  17 +
 src/util/virpci.h                             |   4 +
 tests/qemuhotplugtest.c                       |  68 ++-
 ...emuhotplug-multifunction-hostdev-pci-2.xml |  14 +
 ...plug-multifunction-hostdev-pci-partial.xml |  27 ++
 .../qemuhotplug-multifunction-hostdev-pci.xml |  26 ++
 ...live+multifunction-hostdev-pci-partial.xml |  82 ++++
 ...ug-base-live+multifunction-hostdev-pci.xml |  82 ++++
 ...-base-live+multifunction-hostdev-pci-2.xml |  59 +++
 ...es-base-live+multifunction-hostdev-pci.xml |  69 +++
 .../hostdev-pci-address-unassigned.args       |   9 +-
 .../hostdev-pci-multifunction.args            |  18 +-
 .../hostdev-pci-multifunction.xml             |   8 +-
 .../hostdev-pci-no-primary-function.xml       |  23 +
 .../hostdev-pci-validate.args                 |  30 ++
 .../qemuxml2argvdata/hostdev-pci-validate.xml |  29 ++
 .../qemuxml2argvdata/pseries-hostdevs-1.args  |   5 +-
 .../qemuxml2argvdata/pseries-hostdevs-3.args  |   5 +-
 tests/qemuxml2argvtest.c                      |  14 +-
 .../hostdev-pci-address-unassigned.xml        |   8 +-
 .../hostdev-pci-multifunction.xml             |  24 +-
 .../qemuxml2xmloutdata/pseries-hostdevs-1.xml |   4 +-
 .../qemuxml2xmloutdata/pseries-hostdevs-3.xml |   4 +-
 tests/virpcitestdata/0005-90-01.1.config      | Bin 256 -> 256 bytes
 tests/virpcitestdata/0005-90-01.2.config      | Bin 256 -> 256 bytes
 tests/virpcitestdata/0005-90-01.3.config      | Bin 0 -> 256 bytes
 41 files changed, 2023 insertions(+), 259 deletions(-)
 create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-multifunction-hostdev-pci-2.xml
 create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-multifunction-hostdev-pci-partial.xml
 create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-multifunction-hostdev-pci.xml
 create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+multifunction-hostdev-pci-partial.xml
 create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+multifunction-hostdev-pci.xml
 create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+multifunction-hostdev-pci-2.xml
 create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+multifunction-hostdev-pci.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-pci-no-primary-function.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-pci-validate.args
 create mode 100644 tests/qemuxml2argvdata/hostdev-pci-validate.xml
 create mode 100644 tests/virpcitestdata/0005-90-01.3.config

-- 
2.24.1





More information about the libvir-list mailing list