84 lines
3.4 KiB
Diff
84 lines
3.4 KiB
Diff
|
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
|
||
|
|