Page MenuHomeFreeBSD

D58837.1794713787.diff
No OneTemporary

Authored By
Unknown
Size
1 KB
Referenced Files
None
Subscribers
None

D58837.1794713787.diff

Index: sys/dev/pci/pci.c
===================================================================
--- sys/dev/pci/pci.c
+++ sys/dev/pci/pci.c
@@ -4488,6 +4488,13 @@
pcib = device_get_parent(bus);
if (pcib == NULL || !is_pci_device(pcib))
break;
+ /*
+ * A PCI function may expose a host bridge for a synthetic PCI
+ * domain. Its Device Control belongs to the parent domain and
+ * does not describe an upstream link in the synthetic hierarchy.
+ */
+ if (pci_get_domain(pcib) != pci_get_domain(dev))
+ break;
dinfo = device_get_ivars(pcib);
if (dinfo->cfg.pcie.pcie_location != 0) {
mps = pcie_read_config(pcib, PCIER_DEVICE_CTL, 2) &
@@ -4705,6 +4712,13 @@
pcib = device_get_parent(bus);
if (!is_pci_device(pcib))
return;
+ /*
+ * A PCI function may provide a host bridge into a separate domain,
+ * as Intel VMD does. Do not treat the function's host-facing PCIe
+ * Device Control as the upstream end of a link in the child domain.
+ */
+ if (pci_get_domain(pcib) != pcib_get_domain(bus))
+ return;
upinfo = device_get_ivars(pcib);
if (upinfo->cfg.pcie.pcie_location == 0)
return;

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 15, 3:36 AM (6 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41737107
Default Alt Text
D58837.1794713787.diff (1 KB)

Event Timeline