From: Ani Sinha <anisinha@redhat.com>
To: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Cc: Ani Sinha <anisinha@redhat.com>,
jusual@redhat.com, imammedo@redhat.com, akihiko.odaki@daynix.com
Subject: [PATCH v8 5/6] hw/pci: warn when PCIe device is plugged into non-zero slot of downstream port
Date: Wed, 5 Jul 2023 17:29:23 +0530 [thread overview]
Message-ID: <20230705115925.5339-6-anisinha@redhat.com> (raw)
In-Reply-To: <20230705115925.5339-1-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>
---
hw/pci/pci.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index e2eb4c3b4a..62b393dfb7 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 "
--
2.39.1
next prev parent reply other threads:[~2023-07-05 12:00 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-05 11:59 [PATCH v8 0/6] test and QEMU fixes to ensure proper PCIE device usage Ani Sinha
2023-07-05 11:59 ` [PATCH v8 1/6] tests/acpi: allow changes in DSDT.noacpihp table blob Ani Sinha
2023-07-05 11:59 ` [PATCH v8 2/6] tests/acpi/bios-tables-test: use the correct slot on the pcie-root-port Ani Sinha
2023-07-05 11:59 ` [PATCH v8 3/6] tests/acpi/bios-tables-test: update acpi blob q35/DSDT.noacpihp Ani Sinha
2023-07-05 11:59 ` [PATCH v8 4/6] tests/qtest/hd-geo-test: fix incorrect pcie-root-port usage and simplify test Ani Sinha
2023-07-05 11:59 ` Ani Sinha [this message]
2023-07-06 1:48 ` [PATCH v8 5/6] hw/pci: warn when PCIe device is plugged into non-zero slot of downstream port Akihiko Odaki
2023-07-05 11:59 ` [PATCH v8 6/6] hw/pci: add comment explaining the reason for checking function 0 in hotplug Ani Sinha
2023-07-05 12:03 ` Ani Sinha
2023-07-10 19:43 ` Michael S. Tsirkin
2023-07-11 3:46 ` Ani Sinha
2023-07-11 3:51 ` Michael Tokarev
2023-07-11 4:03 ` Ani Sinha
2023-07-11 4:13 ` Michael Tokarev
2023-07-11 4:36 ` Ani Sinha
2023-07-05 11:59 ` [PATCH v8 6/6] hw/pci: add comment to explain checking for available function 0 in pci hotplug Ani Sinha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230705115925.5339-6-anisinha@redhat.com \
--to=anisinha@redhat.com \
--cc=akihiko.odaki@daynix.com \
--cc=imammedo@redhat.com \
--cc=jusual@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).