I apparently misunderstood Marcel's description of what could and couldn't be plugged into qemu's pxb-pcie controller (known as pcie-expander-bus in libvirt) - I specifically allowed directly connecting a pcie-switch-upstream-port, and it turns out that causes the guest kernel to crash. This patch forbids such a connection, and updates the xml docs appropriately. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1361172 --- docs/formatdomain.html.in | 24 +++++++++++++----------- src/conf/domain_addr.c | 9 +++------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 5acb3b9..eddb8dd 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3346,8 +3346,8 @@ this expander bus, and bus numbers less than the specified value will be available to the next lower expander-bus (or the root-bus if there are no lower expander buses). If you do not - specify a busNumber, libvirt will find the lowest existing - busNumber in all other expander buses (or use 256 if there are + specify a busNr, libvirt will find the lowest existing + busNr in all other expander buses (or use 256 if there are no others) and auto-assign the busNr of that found bus - 2, which provides one bus number for the pci-expander-bus and one for the pci-bridge that is automatically attached to it (if @@ -3360,15 +3360,17 @@ 2nd bus-number is just being reserved for the pcie-root-port that must necessarily be connected to the bus in order to actually plug in an endpoint device. If you intend to plug - multiple devices into a pcie-expander-bus, you must instead - connect a pcie-switch-upstream-port to the - pcie-expander-bus, and multiple pcie-switch-downstream-ports - to the pcie-switch-downstream-port, and of course for this - to work properly, you will need to decrease the - pcie-expander-bus' busNr accordingly so that there are - enough unused bus numbers above it to accomodate giving out - one bus number for the upstream-port and one for each - downstream-port). + multiple devices into a pcie-expander-bus, you must connect + a pcie-switch-upstream-port to the pcie-root-bus that is + plugged into the pcie-expander-bus, and multiple + pcie-switch-downstream-ports to the + pcie-switch-upstream-port, and of course for this to work + properly, you will need to decrease the pcie-expander-bus' + busNr accordingly so that there are enough unused bus + numbers above it to accomodate giving out one bus number for + the upstream-port and one for each downstream-port (in + addition to the pcie-root-port and the pcie-expander-bus + itself). </p> </dd> <dt><code>node</code></dt> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 98176e2..faf5a5a 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -161,7 +161,7 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr, } return false; } - return true; + return true; } @@ -291,11 +291,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus, bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST; break; case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: - /* single slot, no hotplug, only accepts pcie-root-port or - * pcie-switch-upstream-port. - */ - bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT - | VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT); + /* single slot, no hotplug, only accepts pcie-root-port */ + bus->flags = VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT; bus->minSlot = 0; bus->maxSlot = 0; break; -- 2.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list