]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Add virDomainPCIAddressSet.isPCIeToPCIBridgeSupported
authorAndrea Bolognani <abologna@redhat.com>
Fri, 23 Mar 2018 17:52:22 +0000 (18:52 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Fri, 6 Apr 2018 12:12:19 +0000 (14:12 +0200)
Just like the existing areMultipleRootsSupported, this will
allow us to change the results of the driver-agnostic PCI
address allocation logic based on whether the QEMU binary
supports certain features.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
src/conf/domain_addr.h
src/qemu/qemu_domain_address.c

index 87248a4fb8f1b578cb7015c68fa745d39d79d9bf..3236b7d6de6598fda056b74413344ec0c3a8cbbb 100644 (file)
@@ -118,6 +118,8 @@ struct _virDomainPCIAddressSet {
                              and addresses aren't saved in device infos */
     /* If true, the guest can have multiple pci-root controllers */
     bool areMultipleRootsSupported;
+    /* If true, the guest can use the pcie-to-pci-bridge controller */
+    bool isPCIeToPCIBridgeSupported;
 };
 typedef struct _virDomainPCIAddressSet virDomainPCIAddressSet;
 typedef virDomainPCIAddressSet *virDomainPCIAddressSetPtr;
index 86d9807908bacce0b6ade44822c3fbd8afc6c85f..7fe9d5926c9f5e27638f1c098175127eb0f7dffb 100644 (file)
@@ -1338,6 +1338,7 @@ qemuDomainCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
 
 static virDomainPCIAddressSetPtr
 qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
+                              virQEMUCapsPtr qemuCaps,
                               unsigned int nbuses,
                               bool dryRun)
 {
@@ -1355,6 +1356,9 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
     if (qemuDomainIsPSeries(def))
         addrs->areMultipleRootsSupported = true;
 
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE))
+        addrs->isPCIeToPCIBridgeSupported = true;
+
     for (i = 0; i < def->ncontrollers; i++) {
         virDomainControllerDefPtr cont = def->controllers[i];
         size_t idx = cont->idx;
@@ -2361,7 +2365,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
 
     if (nbuses > 0) {
         /* 1st pass to figure out how many PCI bridges we need */
-        if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, true)))
+        if (!(addrs = qemuDomainPCIAddressSetCreate(def, qemuCaps, nbuses, true)))
             goto cleanup;
 
         if (qemuDomainValidateDevicePCISlotsChipsets(def, qemuCaps,
@@ -2491,7 +2495,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
         addrs = NULL;
     }
 
-    if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, false)))
+    if (!(addrs = qemuDomainPCIAddressSetCreate(def, qemuCaps, nbuses, false)))
         goto cleanup;
 
     if (qemuDomainSupportsPCI(def, qemuCaps)) {