linux-yocto/drivers/pci
Nirmal Patel cbb445d5cd PCI: vmd: Assign VMD IRQ domain before enumeration
commit 886e67100b upstream.

During the boot process all the PCI devices are assigned default PCI-MSI
IRQ domain including VMD endpoint devices. If interrupt-remapping is
enabled by IOMMU, the PCI devices except VMD get new INTEL-IR-MSI IRQ
domain. And VMD is supposed to create and assign a separate VMD-MSI IRQ
domain for its child devices in order to support MSI-X remapping
capabilities.

Now when MSI-X remapping in VMD is disabled in order to improve
performance, VMD skips VMD-MSI IRQ domain assignment process to its
child devices. Thus the devices behind VMD get default PCI-MSI IRQ
domain instead of INTEL-IR-MSI IRQ domain when VMD creates root bus and
configures child devices.

As a result host OS fails to boot and DMAR errors were observed when
interrupt remapping was enabled on Intel Icelake CPUs. For instance:

  DMAR: DRHD: handling fault status reg 2
  DMAR: [INTR-REMAP] Request device [0xe2:0x00.0] fault index 0xa00 [fault reason 0x25] Blocked a compatibility format interrupt request

To fix this issue, dev_msi_info struct in dev struct maintains correct
value of IRQ domain. VMD will use this information to assign proper IRQ
domain to its child devices when it doesn't create a separate IRQ domain.

Link: https://lore.kernel.org/r/20220511095707.25403-2-nirmal.patel@linux.intel.com
Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
[ This patch has already been backported to the Ubuntu 5.15 kernel
  and fixes boot issues on Intel platforms with VMD rev 04,
  confirmed on version 5.15.189. ]
Signed-off-by: Artur Piechocki <artur.piechocki@open-e.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-08-28 16:24:33 +02:00
..
controller PCI: vmd: Assign VMD IRQ domain before enumeration 2025-08-28 16:24:33 +02:00
endpoint PCI: endpoint: Fix configfs group removal on driver teardown 2025-08-28 16:24:29 +02:00
hotplug PCI: pnv_php: Fix surprise plug detection and recovery 2025-08-28 16:24:12 +02:00
pcie PCI/DPC: Initialize aer_err_info before using it 2025-06-27 11:05:16 +01:00
switch PCI: switchtec: Fix an error handling path in switchtec_pci_probe() 2024-03-26 18:21:27 -04:00
access.c
ats.c
bus.c
ecam.c
host-bridge.c
iov.c
irq.c
Kconfig x86/kaslr: Reduce KASLR entropy on most x86 systems 2025-06-04 14:38:00 +02:00
Makefile
mmap.c
msi.c PCI/MSI: Prevent MSI hardware interrupt number truncation 2024-03-01 13:21:48 +01:00
of.c
p2pdma.c PCI/P2PDMA: Fix a sleeping issue in a RCU read section 2024-03-26 18:21:27 -04:00
pci-acpi.c PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports 2025-08-28 16:24:31 +02:00
pci-bridge-emul.c
pci-bridge-emul.h
pci-driver.c PCI/PM: Drain runtime-idle callbacks before driver removal 2024-04-10 16:18:38 +02:00
pci-label.c
pci-mid.c
pci-pf-stub.c
pci-stub.c
pci-sysfs.c PCI: Add 'reset_subordinate' to reset hierarchy below bridge 2024-12-14 19:51:42 +01:00
pci.c PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports 2025-08-28 16:24:31 +02:00
pci.h PCI: Add 'reset_subordinate' to reset hierarchy below bridge 2024-12-14 19:51:42 +01:00
probe.c PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports 2025-08-28 16:24:31 +02:00
proc.c
quirks.c PCI: Add ACS quirk for Loongson PCIe 2025-06-27 11:05:27 +01:00
remove.c PCI: Fix use-after-free in pci_bus_release_domain_nr() 2025-05-02 07:44:40 +02:00
rom.c
search.c
setup-bus.c PCI: Fix old_size lower bound in calculate_iosize() too 2025-06-04 14:38:01 +02:00
setup-irq.c
setup-res.c PCI: Work around Intel I210 ROM BAR overlap defect 2024-04-10 16:18:38 +02:00
slot.c PCI: Fix use-after-free of slot->bus on hot remove 2024-12-14 19:51:13 +01:00
syscall.c
vc.c
vpd.c
xen-pcifront.c