diff options
author | Marc Zyngier <maz@kernel.org> | 2021-11-04 18:01:29 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-11-26 11:36:19 +0100 |
commit | a632cb0b4013ff9ba8ce5f062a45e5652975a68b (patch) | |
tree | 4972e2e1268fdc6dba673058a6d7abd70d77d6a9 /drivers/pci | |
parent | d8ea896354e3177316a24e2fd379785082d1a2fb (diff) | |
download | linux-stable-a632cb0b4013ff9ba8ce5f062a45e5652975a68b.tar.gz linux-stable-a632cb0b4013ff9ba8ce5f062a45e5652975a68b.tar.bz2 linux-stable-a632cb0b4013ff9ba8ce5f062a45e5652975a68b.zip |
PCI/MSI: Deal with devices lying about their MSI mask capability
commit 2226667a145db2e1f314d7f57fd644fe69863ab9 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>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/msi.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index c824764f44ff..d42c84a2d2eb 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -569,6 +569,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, const struct irq_affinity *affd) goto out; pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control); + /* Lies, damned lies, and MSIs */ + if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING) + control |= PCI_MSI_FLAGS_MASKBIT; entry->msi_attrib.is_msix = 0; entry->msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT); |