EDAC, altera: Add IRQ Flags to disable IRQ while handling
authorThor Thayer <tthayer@opensource.altera.com>
Thu, 22 Sep 2016 22:13:39 +0000 (17:13 -0500)
committerBorislav Petkov <bp@suse.de>
Fri, 23 Sep 2016 10:03:34 +0000 (12:03 +0200)
Add the IRQF_ONESHOT and IRQF_TRIGGER_HIGH flags to disable the IRQ
while executing the IRQ handler. Remove the IRQF_SHARED because these
are not shared IRQs in the domain. Exposed when flooding IRQs.

Signed-off-by: Thor Thayer <tthayer@opensource.altera.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/1474582419-7053-2-git-send-email-tthayer@opensource.altera.com
Signed-off-by: Borislav Petkov <bp@suse.de>
drivers/edac/altera_edac.c

index afe630540956cb9671774de96b341dd1dd1226be..58d3e2b39b5b56c6a0594ab10a7dcce864ea5293 100644 (file)
@@ -1445,7 +1445,8 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
        }
        rc = devm_request_irq(&altdev->ddev, altdev->sb_irq,
                              prv->ecc_irq_handler,
-                             IRQF_SHARED, ecc_name, altdev);
+                             IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+                             ecc_name, altdev);
        if (rc) {
                edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n");
                goto err_release_group_1;
@@ -1459,7 +1460,8 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
        }
        rc = devm_request_irq(&altdev->ddev, altdev->db_irq,
                              prv->ecc_irq_handler,
-                             IRQF_SHARED, ecc_name, altdev);
+                             IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+                             ecc_name, altdev);
        if (rc) {
                edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
                goto err_release_group_1;
@@ -1745,9 +1747,9 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
                rc = -ENODEV;
                goto err_release_group1;
        }
-       rc = devm_request_irq(edac->dev, altdev->sb_irq,
-                             prv->ecc_irq_handler,
-                             IRQF_SHARED, ecc_name, altdev);
+       rc = devm_request_irq(edac->dev, altdev->sb_irq, prv->ecc_irq_handler,
+                             IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+                             ecc_name, altdev);
        if (rc) {
                edac_printk(KERN_ERR, EDAC_DEVICE, "No SBERR IRQ resource\n");
                goto err_release_group1;
@@ -1759,9 +1761,9 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
                rc = -ENODEV;
                goto err_release_group1;
        }
-       rc = devm_request_irq(edac->dev, altdev->db_irq,
-                             prv->ecc_irq_handler,
-                             IRQF_SHARED, ecc_name, altdev);
+       rc = devm_request_irq(edac->dev, altdev->db_irq, prv->ecc_irq_handler,
+                             IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+                             ecc_name, altdev);
        if (rc) {
                edac_printk(KERN_ERR, EDAC_DEVICE, "No DBERR IRQ resource\n");
                goto err_release_group1;