From: Yongji Xie <elohimes@xxxxxxxxx> Some iommu drivers would be initialized after PCI device enumeration. So PCI_BUS_FLAGS_MSI_REMAP would not be set when probing PCI devices although IOMMU enables capability of IRQ remapping. This patch tests this capability and set the flag when iommu driver is initialized. Signed-off-by: Yongji Xie <xyjxie@xxxxxxxxxxxxxxxxxx> Signed-off-by: Alexey Kardashevskiy <aik@xxxxxxxxx> --- drivers/iommu/iommu.c | 8 ++++++++ drivers/pci/probe.c | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index cf7ca7e70777..0b5881ddca09 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1063,6 +1063,14 @@ static int add_iommu_group(struct device *dev, void *data) const struct iommu_ops *ops = cb->ops; int ret; + /* + * Set PCI_BUS_FLAGS_MSI_REMAP for all PCI buses when IOMMU + * have capability of IRQ remapping. + */ + if (dev_is_pci(dev) && ops->capable && + ops->capable(IOMMU_CAP_INTR_REMAP)) + to_pci_dev(dev)->bus->bus_flags |= PCI_BUS_FLAGS_MSI_REMAP; + if (!ops->add_device) return 0; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index f2393b7d7ebf..14aac9df3d17 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -17,6 +17,7 @@ #include <linux/acpi.h> #include <linux/irqdomain.h> #include <linux/pm_runtime.h> +#include <linux/iommu.h> #include "pci.h" #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ -- 2.11.0