mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
conf: Introduce VIR_PCI_CONNECT_INTEGRATED
This new flag can be used to convince the PCI address assignment algorithm to place a device directly on the root bus. It will be used to implement support for virtio-iommu, which needs to be an integrated device in order to work correctly. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
b7f5ad4610
commit
afd03c21e4
@ -303,6 +303,23 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddress *addr,
|
|||||||
virErrorNumber errType = (fromConfig
|
virErrorNumber errType = (fromConfig
|
||||||
? VIR_ERR_XML_ERROR : VIR_ERR_INTERNAL_ERROR);
|
? VIR_ERR_XML_ERROR : VIR_ERR_INTERNAL_ERROR);
|
||||||
|
|
||||||
|
if (devFlags & VIR_PCI_CONNECT_INTEGRATED) {
|
||||||
|
if (addr->bus == 0) {
|
||||||
|
/* pcie-root doesn't usually allow endpoint devices to be
|
||||||
|
* plugged directly into it, but for integrated devices
|
||||||
|
* that's exactly what we want */
|
||||||
|
busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
|
||||||
|
} else {
|
||||||
|
if (reportError) {
|
||||||
|
virReportError(errType,
|
||||||
|
_("The device at PCI address %s needs to be "
|
||||||
|
"an integrated device (bus=0)"),
|
||||||
|
addrStr);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fromConfig) {
|
if (fromConfig) {
|
||||||
/* If the requested connection was manually specified in
|
/* If the requested connection was manually specified in
|
||||||
* config, allow a PCI device to connect to a PCIe slot, or
|
* config, allow a PCI device to connect to a PCIe slot, or
|
||||||
|
@ -35,24 +35,28 @@ typedef enum {
|
|||||||
VIR_PCI_CONNECT_AUTOASSIGN = 1 << 0, /* okay to autoassign a device to this controller */
|
VIR_PCI_CONNECT_AUTOASSIGN = 1 << 0, /* okay to autoassign a device to this controller */
|
||||||
VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 1, /* is hotplug needed/supported */
|
VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 1, /* is hotplug needed/supported */
|
||||||
|
|
||||||
|
/* Set for devices that can only work as integrated devices (directly
|
||||||
|
* connected to pci.0 or pcie.0, with no additional buses in between) */
|
||||||
|
VIR_PCI_CONNECT_INTEGRATED = 1 << 2,
|
||||||
|
|
||||||
/* set for devices that can share a single slot in auto-assignment
|
/* set for devices that can share a single slot in auto-assignment
|
||||||
* (by assigning one device to each of the 8 functions on the slot)
|
* (by assigning one device to each of the 8 functions on the slot)
|
||||||
*/
|
*/
|
||||||
VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 2,
|
VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 3,
|
||||||
|
|
||||||
/* kinds of devices as a bitmap so they can be combined (some PCI
|
/* kinds of devices as a bitmap so they can be combined (some PCI
|
||||||
* controllers permit connecting multiple types of devices)
|
* controllers permit connecting multiple types of devices)
|
||||||
*/
|
*/
|
||||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 3,
|
VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 4,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 4,
|
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 5,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 5,
|
VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 6,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 6,
|
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 7,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 7,
|
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 8,
|
||||||
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 8,
|
VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 9,
|
||||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 9,
|
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 10,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 10,
|
VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 11,
|
||||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 11,
|
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 12,
|
||||||
VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 12,
|
VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 13,
|
||||||
} virDomainPCIConnectFlags;
|
} virDomainPCIConnectFlags;
|
||||||
|
|
||||||
/* a combination of all bits that describe the type of connections
|
/* a combination of all bits that describe the type of connections
|
||||||
|
Loading…
x
Reference in New Issue
Block a user