diff options
author | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2021-11-19 09:04:51 -0800 |
---|---|---|
committer | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2021-11-19 09:04:51 -0800 |
commit | 7f1d99472e5dd083d95ac10a815bca16216b1d2c (patch) | |
tree | 3a31c06f9a0a9c5037725d5a329518c667cf1914 /0003-PCI-MSI-Deal-with-devices-lying-about-their-MSI-mask.patch | |
parent | Updated to 5.12.2 (diff) | |
download | linux-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.patch | 56 |
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 + |