mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
conf: restrict expander buses to connect only to a root bus
More misunderstanding/mistaken assumptions on my part - I had thought that a pci-expander-bus could be plugged into any legacy PCI slot, and that pcie-expander-bus could be plugged into any PCIe slot. This isn't correct - they can both be plugged ontly into their respective root buses. This patch adds that restriction. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1358712
This commit is contained in:
@@ -51,20 +51,17 @@ virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model)
|
||||
return 0;
|
||||
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
|
||||
/* pci-bridge and pci-expander-bus are treated like a standard
|
||||
* PCI endpoint device, because they can plug into any
|
||||
* standard PCI slot.
|
||||
/* pci-bridge is treated like a standard
|
||||
* PCI endpoint device, because it can plug into any
|
||||
* standard PCI slot (it just can't be hotplugged).
|
||||
*/
|
||||
return VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
|
||||
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
|
||||
return VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS;
|
||||
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
|
||||
/* pcie-expander-bus is treated like a standard PCIe endpoint
|
||||
* device (the part of pcie-expander-bus that is plugged in
|
||||
* isn't the expander bus itself, but a companion device used
|
||||
* for setting it up).
|
||||
*/
|
||||
return VIR_PCI_CONNECT_TYPE_PCIE_DEVICE;
|
||||
return VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS;
|
||||
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE:
|
||||
return VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE;
|
||||
@@ -137,6 +134,10 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
connectStr = "pci-switch-downstream-port";
|
||||
} else if (devFlags & VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE) {
|
||||
connectStr = "dmi-to-pci-bridge";
|
||||
} else if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS) {
|
||||
connectStr = "pci-expander-bus";
|
||||
} else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS) {
|
||||
connectStr = "pcie-expander-bus";
|
||||
} else {
|
||||
/* this should never happen. If it does, there is a
|
||||
* bug in the code that sets the flag bits for devices.
|
||||
@@ -243,8 +244,14 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
* bus.
|
||||
*/
|
||||
switch (model) {
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
|
||||
bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS);
|
||||
bus->minSlot = 1;
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
|
||||
bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE);
|
||||
bus->minSlot = 1;
|
||||
@@ -265,7 +272,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
*/
|
||||
bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT |
|
||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE);
|
||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS);
|
||||
bus->minSlot = 1;
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
|
||||
@@ -41,6 +41,8 @@ typedef enum {
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 4,
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 5,
|
||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 6,
|
||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 7,
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 8,
|
||||
} virDomainPCIConnectFlags;
|
||||
|
||||
/* a combination of all bits that describe the type of connections
|
||||
@@ -51,7 +53,9 @@ typedef enum {
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT | \
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT | \
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT | \
|
||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE)
|
||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE | \
|
||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS | \
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS)
|
||||
|
||||
/* combination of all bits that could be used to connect a normal
|
||||
* endpoint device (i.e. excluding the connection possible between an
|
||||
|
||||
Reference in New Issue
Block a user