libvirt/SOURCES/libvirt-conf-simplify-logic-when-checking-for-AUTOASSIGN-PCI-addresses.patch

84 lines
3.4 KiB
Diff
Raw Normal View History

From f52197675b2babfafb1b89058e3fd01decebd8ab Mon Sep 17 00:00:00 2001
Message-Id: <f52197675b2babfafb1b89058e3fd01decebd8ab@dist-git>
From: Laine Stump <laine@redhat.com>
Date: Sun, 26 Apr 2020 13:04:12 -0400
Subject: [PATCH] conf: simplify logic when checking for AUTOASSIGN PCI
addresses
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>
(cherry picked from commit fcdf87d3ef14de9dfb0acaf4b4445e1580dfc629)
https://bugzilla.redhat.com/1802592
Signed-off-by: Laine Stump <laine@redhat.com>
Message-Id: <20200426170415.18328-10-laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
---
src/conf/domain_addr.c | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
index 53be6cd34b..05f036e3e6 100644
--- a/src/conf/domain_addr.c
+++ b/src/conf/domain_addr.c
@@ -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;
}
--
2.26.2