From 093fe7d6bde7f224200e7f2877949f3196002bd7 Mon Sep 17 00:00:00 2001 Message-Id: <093fe7d6bde7f224200e7f2877949f3196002bd7@dist-git> From: Laine Stump Date: Wed, 10 Aug 2016 11:00:12 -0400 Subject: [PATCH] conf: don't allow connecting upstream-port directly to pce-expander-bus 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 (cherry picked from commit b70e54342bbd1756234e07ed6b22bdd3cd12b689) --- docs/formatdomain.html.in | 20 +++++++++++--------- src/conf/domain_addr.c | 7 ++----- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index c2e261d..b74057f 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3333,15 +3333,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-port 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).

node
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 61c4074..c22329d 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -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.9.2