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. Reviewed-by tags have been collected, so figuring out which patches are still in need of reviewing is pretty easy. As an exception, patches 12 and 13 are unchanged but don't carry the tag due to the required documentation being still missing. Known limitations: * hot(un)plug is still not handled - shouldn't be too much work to fix this, but I though it would be better to send out the code now rather than holding it up further, as most of it shouldn't change anyway; * 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; * documentation is still missing - I'll take care of that once the code is feature-complete, eg. the first item has been solved; * no epic cover letter this time around - apologies to all my fans :( [v1] https://www.redhat.com/archives/libvir-list/2017-June/msg00110.html Andrea Bolognani (24): conf: Remove obsolete comment conf: Make virDomainPCIAddressSetGrow() private conf: Make virDomainPCIAddressFlagsCompatible() private conf: Tweak virDomainPCIAddressGetNextAddr() signature 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 convention 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 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 | 199 +++++++++++------ 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 | 248 +++++++++++++++++++-- src/qemu/qemu_hotplug.c | 5 +- .../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 +++- 61 files changed, 1562 insertions(+), 211 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