summaryrefslogtreecommitdiff
path: root/0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch
diff options
context:
space:
mode:
authorjc_gargma <jc_gargma@iserlohn-fortress.net>2021-11-19 09:04:51 -0800
committerjc_gargma <jc_gargma@iserlohn-fortress.net>2021-11-19 09:04:51 -0800
commit7f1d99472e5dd083d95ac10a815bca16216b1d2c (patch)
tree3a31c06f9a0a9c5037725d5a329518c667cf1914 /0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch
parentUpdated to 5.12.2 (diff)
downloadlinux-7f1d99472e5dd083d95ac10a815bca16216b1d2c.tar.xz
Updated to 5.15.3
Diffstat (limited to '0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch')
-rw-r--r--0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch b/0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch
new file mode 100644
index 0000000..2e55d5d
--- /dev/null
+++ b/0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch
@@ -0,0 +1,56 @@
+From 946e7362fca464b136ec89171e565e33153ccdcf Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <maz@kernel.org>
+Date: Thu, 4 Nov 2021 18:01:29 +0000
+Subject: [PATCH 3/8] PCI/MSI: Deal with devices lying about their MSI mask
+ capability
+
+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>
+For: https://bugs.archlinux.org/task/72734
+For: https://bugs.archlinux.org/task/72777
+---
+ drivers/pci/msi.c | 3 +++
+ include/linux/pci.h | 2 ++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
+index ea6371eb9b25..e2dedfa9072d 100644
+--- a/drivers/pci/msi.c
++++ b/drivers/pci/msi.c
+@@ -477,6 +477,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, 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);
+diff --git a/include/linux/pci.h b/include/linux/pci.h
+index cd8aa6fce204..152a4d74f87f 100644
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -233,6 +233,8 @@ enum pci_dev_flags {
+ PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
+ /* Don't use Relaxed Ordering for TLPs directed at this device */
+ PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
++ /* Device does honor MSI masking despite saying otherwise */
++ PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
+ };
+
+ enum pci_irq_reroute_variant {
+--
+2.33.1
+