diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-08-04 01:29:51 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-08-04 01:29:51 -0700 |
commit | 89e9aad65ffad96c3a35ff979a61a65761873951 (patch) | |
tree | 8197ad0688a895fa190b4e03a975610b41b4d583 | |
parent | 288d5abec8314ae50fe6692f324b0444acae8486 (diff) | |
download | op-kernel-dev-89e9aad65ffad96c3a35ff979a61a65761873951.zip op-kernel-dev-89e9aad65ffad96c3a35ff979a61a65761873951.tar.gz |
ide: Fix irq flags madness
commit ec1a123 (IDE: pass IRQ flags to the IDE core) introduced the
bogosity of passing unfiltered resource->flags to the irq_flags which
are used for request_irq. It results in random bits set (especially
IORESOURCE_IRQ which maps to IRQF_PER_CPU).
Filter the bits proper.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/ide/ide_platform.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ide/ide_platform.c b/drivers/ide/ide_platform.c index 542603b..962693b 100644 --- a/drivers/ide/ide_platform.c +++ b/drivers/ide/ide_platform.c @@ -19,6 +19,7 @@ #include <linux/module.h> #include <linux/ata_platform.h> #include <linux/platform_device.h> +#include <linux/interrupt.h> #include <linux/io.h> static void __devinit plat_ide_setup_ports(struct ide_hw *hw, @@ -95,7 +96,10 @@ static int __devinit plat_ide_probe(struct platform_device *pdev) plat_ide_setup_ports(&hw, base, alt_base, pdata, res_irq->start); hw.dev = &pdev->dev; - d.irq_flags = res_irq->flags; + d.irq_flags = res_irq->flags & IRQF_TRIGGER_MASK; + if (res_irq->flags & IORESOURCE_IRQ_SHAREABLE) + d.irq_flags |= IRQF_SHARED; + if (mmio) d.host_flags |= IDE_HFLAG_MMIO; |