Skip to content

Commit f28c620

Browse files
Marc Zyngiergregkh
authored andcommitted
PCI/MSI: Deal with devices lying about their MSI mask capability
commit 2226667 upstream. It appears that some devices are lying about their mask capability, pretending that they don't have it, while they actually do. The net result is that now that we don't enable MSIs on such endpoint. Add a new per-device flag to deal with this. Further patches will make use of it, sadly. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20211104180130.3825416-2-maz@kernel.org Cc: Bjorn Helgaas <helgaas@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 9b61500 commit f28c620

2 files changed

Lines changed: 5 additions & 0 deletions

File tree

drivers/pci/msi.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, struct irq_affinity *affd)
592592
goto out;
593593

594594
pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
595+
/* Lies, damned lies, and MSIs */
596+
if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
597+
control |= PCI_MSI_FLAGS_MASKBIT;
595598

596599
entry->msi_attrib.is_msix = 0;
597600
entry->msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT);

include/linux/pci.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ enum pci_dev_flags {
227227
PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
228228
/* Don't use Relaxed Ordering for TLPs directed at this device */
229229
PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
230+
/* Device does honor MSI masking despite saying otherwise */
231+
PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
230232
};
231233

232234
enum pci_irq_reroute_variant {

0 commit comments

Comments
 (0)