mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
genirq/msi: Limit level-triggered MSI to platform devices
Nobody would be insane enough to try and use level triggered MSIs on PCI, but let's make sure it doesn't happen. Also, let's mandate that the irqchip backing the platform MSI domain is providing the IRQCHIP_SUPPORTS_LEVEL_MSI flag. Signed-off-by: Marc Zyngier <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: Rob Herring <[email protected]> Cc: Jason Cooper <[email protected]> Cc: Ard Biesheuvel <[email protected]> Cc: Srinivas Kandagatla <[email protected]> Cc: Thomas Petazzoni <[email protected]> Cc: Miquel Raynal <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
This commit is contained in:
1 parent
0be8153cbc
commit
6988e0e0d2
4 files changed
+9
No files matched your search
@@ -101,6 +101,9 @@ static void platform_msi_update_chip_ops(struct msi_domain_info *info)
|
||||
chip->irq_set_affinity = msi_domain_set_affinity;
|
||||
if (!chip->irq_write_msi_msg)
|
||||
chip->irq_write_msi_msg = platform_msi_write_msg;
|
||||
if (WARN_ON((info->flags & MSI_FLAG_LEVEL_CAPABLE) &&
|
||||
!(chip->flags & IRQCHIP_SUPPORTS_LEVEL_MSI)))
|
||||
info->flags &= ~MSI_FLAG_LEVEL_CAPABLE;
|
||||
}
|
||||
|
||||
static void platform_msi_free_descs(struct device *dev, int base, int nvec)
|
||||
|
||||
@@ -163,6 +163,8 @@ struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
|
||||
{
|
||||
struct irq_domain *domain;
|
||||
|
||||
if (WARN_ON((info->flags & MSI_FLAG_LEVEL_CAPABLE)))
|
||||
info->flags &= ~MSI_FLAG_LEVEL_CAPABLE;
|
||||
if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
|
||||
fsl_mc_msi_update_dom_ops(info);
|
||||
if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
|
||||
|
||||
@@ -1434,6 +1434,9 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
|
||||
{
|
||||
struct irq_domain *domain;
|
||||
|
||||
if (WARN_ON(info->flags & MSI_FLAG_LEVEL_CAPABLE))
|
||||
info->flags &= ~MSI_FLAG_LEVEL_CAPABLE;
|
||||
|
||||
if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
|
||||
pci_msi_domain_update_dom_ops(info);
|
||||
if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
|
||||
|
||||
@@ -512,6 +512,7 @@ enum {
|
||||
IRQCHIP_SKIP_SET_WAKE = (1 << 4),
|
||||
IRQCHIP_ONESHOT_SAFE = (1 << 5),
|
||||
IRQCHIP_EOI_THREADED = (1 << 6),
|
||||
IRQCHIP_SUPPORTS_LEVEL_MSI = (1 << 7),
|
||||
};
|
||||
|
||||
#include <linux/irqdesc.h>
|
||||
|
||||
Reference in new issue
Block a user