Changes from [v2]: * support hot(un)plug properly; * add documentation. Changes from [v1]: * address review comments; * implement a much better isolation algorithm that doesn't require parsing and formatting the isolation group and can handle more dynamic scenarios, such as empty PHBs changing their isolation groups to accomodate hotplugged hostdevs; * add more test cases. Known limitations: * hostdevs in IOMMU group 0 are not handled properly - the default isolation group is currently 0, which means hostdevs in IOMMU group 0 will be assigned addresses as if they were emulated devices and will not be isolated properly. Fixing this will be a lot of work because it requires cleaning up the the code that instantiates pretty much anything embedding a virDomainDeviceInfo, which is... A lot of things. Luckily, IOMMU group 0 will probably not contain any devices that are actually usable as hostdevs, so it should be okay to fix this in a follow-up series rather than upfront. Reviewed-by tags have been collected, so figuring out which patches are still in need of reviewing is pretty easy. [v1] https://www.redhat.com/archives/libvir-list/2017-June/msg00110.html [v2] https://www.redhat.com/archives/libvir-list/2017-June/msg00695.html Andrea Bolognani (26): conf: Remove obsolete comment conf: Make virDomainPCIAddressSetGrow() private conf: Make virDomainPCIAddressFlagsCompatible() private conf: Tweak virDomainPCIAddressGetNextAddr() signature qemu: Clean up qemuDomainAttachHostPCIDevice() tests: Update qemumemlock data tests: Mock IOMMU groups conf: Simplify slot allocation qemu: Allow qemuBuildControllerDevStr() to return NULL qemu: Tweak index number checking conf: Move index number checking to drivers qemu: Relax pci-root index requirement for pSeries guests conf: Parse and format <target index='...'/> conf: Add 'spapr-pci-host-bridge' controller model qemu: Automatically pick target index and model for pci-root controllers qemu: Introduce QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE qemu: Deal with PHB naming conventions qemu: Use multiple PHBs for pSeries guests tests: Add tests for pSeries guests with multiple PHBs tests: Add baseline tests for automatic PHB usage qemu: Use PHBs to fill holes in PCI bus numbering qemu: Use PHBs when extending the guest PCI topology conf: Introduce isolation groups conf: Implement isolation rules qemu: Isolate hostdevs on pSeries guests news: Update for multiple PHBs and hostdev isolation docs/formatdomain.html.in | 5 + docs/news.xml | 21 ++ docs/schemas/domaincommon.rng | 7 + src/bhyve/bhyve_device.c | 4 +- src/bhyve/bhyve_domain.c | 15 ++ src/conf/device_conf.h | 14 +- src/conf/domain_addr.c | 222 ++++++++++++------ src/conf/domain_addr.h | 38 ++- src/conf/domain_conf.c | 31 ++- src/conf/domain_conf.h | 2 + src/libvirt_private.syms | 2 - src/qemu/qemu_capabilities.c | 2 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 148 ++++++++++-- src/qemu/qemu_command.h | 9 +- src/qemu/qemu_domain.c | 14 ++ src/qemu/qemu_domain_address.c | 261 +++++++++++++++++++-- src/qemu/qemu_hotplug.c | 23 +- .../qemuargv2xmldata/qemuargv2xml-pseries-disk.xml | 5 +- .../qemuargv2xml-pseries-nvram.xml | 5 +- tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 1 + .../qemumemlock-pc-hardlimit+hostdev.xml | 2 +- .../qemumemlock-pc-hardlimit+locked+hostdev.xml | 2 +- tests/qemumemlockdata/qemumemlock-pc-hostdev.xml | 2 +- .../qemumemlock-pc-locked+hostdev.xml | 2 +- .../qemumemlock-pseries-hardlimit+hostdev.xml | 2 +- ...emumemlock-pseries-hardlimit+locked+hostdev.xml | 2 +- .../qemumemlock-pseries-hostdev.xml | 2 +- .../qemumemlock-pseries-locked+hostdev.xml | 2 +- tests/qemumemlocktest.c | 21 +- .../qemuxml2argv-pseries-hostdevs-1.args | 25 ++ .../qemuxml2argv-pseries-hostdevs-1.xml | 38 +++ .../qemuxml2argv-pseries-hostdevs-2.args | 25 ++ .../qemuxml2argv-pseries-hostdevs-2.xml | 37 +++ .../qemuxml2argv-pseries-hostdevs-3.args | 24 ++ .../qemuxml2argv-pseries-hostdevs-3.xml | 31 +++ .../qemuxml2argv-pseries-many-buses-1.args | 22 ++ .../qemuxml2argv-pseries-many-buses-1.xml | 19 ++ .../qemuxml2argv-pseries-many-buses-2.args | 22 ++ .../qemuxml2argv-pseries-many-buses-2.xml | 18 ++ .../qemuxml2argv-pseries-many-devices.args | 53 +++++ .../qemuxml2argv-pseries-many-devices.xml | 48 ++++ .../qemuxml2argv-pseries-phb-default-missing.args | 22 ++ .../qemuxml2argv-pseries-phb-default-missing.xml | 16 ++ .../qemuxml2argv-pseries-phb-simple.args | 22 ++ .../qemuxml2argv-pseries-phb-simple.xml | 17 ++ tests/qemuxml2argvtest.c | 64 ++++- .../qemuxml2xmlout-panic-pseries.xml | 5 +- .../qemuxml2xmlout-ppc64-usb-controller-legacy.xml | 5 +- .../qemuxml2xmlout-ppc64-usb-controller.xml | 5 +- .../qemuxml2xmlout-pseries-hostdevs-1.xml | 54 +++++ .../qemuxml2xmlout-pseries-hostdevs-2.xml | 50 ++++ .../qemuxml2xmlout-pseries-hostdevs-3.xml | 47 ++++ ...xml => qemuxml2xmlout-pseries-many-buses-1.xml} | 19 +- ...xml => qemuxml2xmlout-pseries-many-buses-2.xml} | 20 +- .../qemuxml2xmlout-pseries-many-devices.xml | 125 ++++++++++ .../qemuxml2xmlout-pseries-nvram.xml | 5 +- .../qemuxml2xmlout-pseries-panic-missing.xml | 5 +- .../qemuxml2xmlout-pseries-panic-no-address.xml | 5 +- ...qemuxml2xmlout-pseries-phb-default-missing.xml} | 18 +- ...m.xml => qemuxml2xmlout-pseries-phb-simple.xml} | 18 +- tests/qemuxml2xmltest.c | 59 ++++- tests/virpcimock.c | 43 +++- 63 files changed, 1637 insertions(+), 216 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-phb-default-missing.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-phb-default-missing.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-phb-simple.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-phb-simple.xml create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-1.xml create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-2.xml create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-3.xml copy tests/qemuxml2xmloutdata/{qemuxml2xmlout-pseries-nvram.xml => qemuxml2xmlout-pseries-many-buses-1.xml} (55%) copy tests/qemuxml2xmloutdata/{qemuxml2xmlout-pseries-nvram.xml => qemuxml2xmlout-pseries-many-buses-2.xml} (54%) create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-devices.xml copy tests/qemuxml2xmloutdata/{qemuxml2xmlout-pseries-nvram.xml => qemuxml2xmlout-pseries-phb-default-missing.xml} (56%) copy tests/qemuxml2xmloutdata/{qemuxml2xmlout-pseries-nvram.xml => qemuxml2xmlout-pseries-phb-simple.xml} (56%) -- 2.7.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list