[PATCH v2 00/21] PCI Multifunction hotplug/hotunplug support
Daniel Henrique Barboza
danielhb413 at gmail.com
Thu Jan 30 17:01:43 UTC 2020
I forgot to add in the cover:
- you can find the feature in this github branch, applied on top of master at
commit 49882b3337:
https://github.com/danielhb/libvirt/tree/multif_v2
- scenarios tested with the feature, all of them using a BCM5719 multifunction
network card on a Power8 host:
* managed='yes', all functions attached/detached
* managed='yes', only a few functions attached/detached (using address='unassigned')
* managed='no' all functions attached/detached
* managed='no', only a few functions attached/detached
* managed='no', only a few functions attached/detached (using address='unassigned')
Thanks,
DHB
On 1/30/20 1:44 PM, Daniel Henrique Barboza wrote:
> 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
>
More information about the libvir-list
mailing list