[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 45/66] hw/pci: warn when PCIe device is plugged into non-zero slot
From: |
Michael S. Tsirkin |
Subject: |
[PULL 45/66] hw/pci: warn when PCIe device is plugged into non-zero slot of downstream port |
Date: |
Mon, 10 Jul 2023 19:04:35 -0400 |
From: Ani Sinha <anisinha@redhat.com>
PCIe downstream ports only have a single device 0, so PCI Express devices can
only be plugged into slot 0 on a PCIe port. Add a warning to let users know
when the invalid configuration is used. We may enforce this more strongly later
once we get more clarity on whether we are introducing a bad regression for
users currently using the wrong configuration.
The change has been tested to not break or alter behaviors of ARI capable
devices by instantiating seven vfs on an emulated igb device (the maximum
number of vfs the igb device supports). The vfs are instantiated correctly
and are seen to have non-zero device/slot numbers in the conventional PCI BDF
representation.
CC: jusual@redhat.com
CC: imammedo@redhat.com
CC: mst@redhat.com
CC: akihiko.odaki@daynix.com
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2128929
Signed-off-by: Ani Sinha <anisinha@redhat.com>
Reviewed-by: Julia Suvorova <jusual@redhat.com>
Message-Id: <20230705115925.5339-6-anisinha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
---
hw/pci/pci.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index fb17138f7d..4b14f31859 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -65,6 +65,7 @@ bool pci_available = true;
static char *pcibus_get_dev_path(DeviceState *dev);
static char *pcibus_get_fw_dev_path(DeviceState *dev);
static void pcibus_reset(BusState *qbus);
+static bool pcie_has_upstream_port(PCIDevice *dev);
static Property pci_props[] = {
DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
@@ -2121,6 +2122,25 @@ static void pci_qdev_realize(DeviceState *qdev, Error
**errp)
}
}
+ /*
+ * A PCIe Downstream Port that do not have ARI Forwarding enabled must
+ * associate only Device 0 with the device attached to the bus
+ * representing the Link from the Port (PCIe base spec rev 4.0 ver 0.3,
+ * sec 7.3.1).
+ * With ARI, PCI_SLOT() can return non-zero value as the traditional
+ * 5-bit Device Number and 3-bit Function Number fields in its associated
+ * Routing IDs, Requester IDs and Completer IDs are interpreted as a
+ * single 8-bit Function Number. Hence, ignore ARI capable devices.
+ */
+ if (pci_is_express(pci_dev) &&
+ !pcie_find_capability(pci_dev, PCI_EXT_CAP_ID_ARI) &&
+ pcie_has_upstream_port(pci_dev) &&
+ PCI_SLOT(pci_dev->devfn)) {
+ warn_report("PCI: slot %d is not valid for %s,"
+ " parent device only allows plugging into slot 0.",
+ PCI_SLOT(pci_dev->devfn), pci_dev->name);
+ }
+
if (pci_dev->failover_pair_id) {
if (!pci_bus_is_express(pci_get_bus(pci_dev))) {
error_setg(errp, "failover primary device must be on "
--
MST
- [PULL 46/66] virtio-iommu: Fix 64kB host page size VFIO device assignment, (continued)
[PULL 59/66] vdpa: Restore MAC address filtering state, Michael S. Tsirkin, 2023/07/10
[PULL 57/66] pcie: Specify 0 for ARI next function numbers, Michael S. Tsirkin, 2023/07/10
[PULL 54/66] include/hw/virtio: add kerneldoc for virtio_init, Michael S. Tsirkin, 2023/07/10
[PULL 45/66] hw/pci: warn when PCIe device is plugged into non-zero slot of downstream port,
Michael S. Tsirkin <=
[PULL 55/66] include/hw/virtio: document some more usage of notifiers, Michael S. Tsirkin, 2023/07/10
[PULL 60/66] vdpa: Restore packet receive filtering state relative with _F_CTRL_RX feature, Michael S. Tsirkin, 2023/07/10
[PULL 58/66] vdpa: Use iovec for vhost_vdpa_net_load_cmd(), Michael S. Tsirkin, 2023/07/10
[PULL 62/66] vdpa: Accessing CVQ header through its structure, Michael S. Tsirkin, 2023/07/10
[PULL 56/66] pcie: Use common ARI next function number, Michael S. Tsirkin, 2023/07/10
[PULL 61/66] vhost: Fix false positive out-of-bounds, Michael S. Tsirkin, 2023/07/10
[PULL 63/66] vdpa: Avoid forwarding large CVQ command failures, Michael S. Tsirkin, 2023/07/10
[PULL 64/66] vdpa: Allow VIRTIO_NET_F_CTRL_RX in SVQ, Michael S. Tsirkin, 2023/07/10
[PULL 65/66] vdpa: Restore packet receive filtering state relative with _F_CTRL_RX_EXTRA feature, Michael S. Tsirkin, 2023/07/10
[PULL 66/66] vdpa: Allow VIRTIO_NET_F_CTRL_RX_EXTRA in SVQ, Michael S. Tsirkin, 2023/07/10