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