]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: simplify logic when checking for AUTOASSIGN PCI addresses
authorLaine Stump <laine@redhat.com>
Sun, 5 Apr 2020 22:01:43 +0000 (18:01 -0400)
committerLaine Stump <laine@redhat.com>
Mon, 13 Apr 2020 02:38:27 +0000 (22:38 -0400)
Old behavior: If the address was manually provided by config, copy
device AUTOASSIGN flag into the bus flag, and then later on in the
function *always* check for a match of the flags (which will always
match if the address came from config, since we just copied it).

New behavior: Don't mess with the bus flags - just directly check if
the AUTOASSIGN flag matches in bus and dev, but only make the check if
the address didn't come from config (i.e. it was auto-assigned by
libvirt).

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_addr.c

index effc223a12c7ca2a0d13c23373fb1d209d2e021c..429550e9701b79721e3289edab7bf84392e32c2e 100644 (file)
@@ -358,18 +358,22 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
          */
         if (busFlags & VIR_PCI_CONNECT_TYPES_ENDPOINT)
             busFlags |= VIR_PCI_CONNECT_TYPES_ENDPOINT;
-        /* Also allow manual specification of bus to override
-         * libvirt's assumptions about whether or not hotplug
-         * capability will be required.
-         */
-        if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
-            busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
         /* if the device is a pci-bridge, allow manually
          * assigning to any bus that would also accept a
          * standard PCI device.
          */
         if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_BRIDGE)
             devFlags |= VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+    } else if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
+               !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
+        if (reportError) {
+            virReportError(errType,
+                           _("The device at PCI address %s was auto-assigned "
+                             "this address, but the PCI controller "
+                             "with index='%d' doesn't allow auto-assignment"),
+                           addrStr, addr->bus);
+        }
+        return false;
     }
 
     /* If this bus doesn't allow the type of connection (PCI
@@ -419,17 +423,6 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
                        addrStr, addr->bus, connectStr);
         return false;
     }
-    if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
-        !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
-        if (reportError) {
-            virReportError(errType,
-                           _("The device at PCI address %s requires "
-                             "hotplug capability, but the PCI controller "
-                             "with index='%d' doesn't support hotplug"),
-                           addrStr, addr->bus);
-        }
-        return false;
-    }
     return true;
 }