diff options
author | Thor Thayer <tthayer@opensource.altera.com> | 2016-09-23 01:13:39 +0300 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2016-09-23 13:03:34 +0300 |
commit | a29d64a45eed1ee0d4ac90335da79ad1a9a0990d (patch) | |
tree | 6d116a2c7fcb3e8486978739551a5187d70f475c | |
parent | 3763569f4c86ff3ea224c822821a4313c9cadde9 (diff) | |
download | linux-a29d64a45eed1ee0d4ac90335da79ad1a9a0990d.tar.xz |
EDAC, altera: Add IRQ Flags to disable IRQ while handling
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>
-rw-r--r-- | drivers/edac/altera_edac.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index afe630540956..58d3e2b39b5b 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -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; |