Skip to content

Commit

Permalink
edac, highbank: Fix interrupt setup of mem and l2 controller
Browse files Browse the repository at this point in the history
Register and enable interrupts after the edac registration. Otherwise
incomming ecc error interrupts lead to crashes during device setup.

Fixing this in drivers for mc and l2.

Signed-off-by: Robert Richter <robert.richter@linaro.org>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Cc: stable <stable@vger.kernel.org>     # 3.6+
Signed-off-by: Robert Richter <rric@kernel.org>
  • Loading branch information
Robert Richter authored and Robert Richter committed Nov 4, 2013
1 parent 959f585 commit a72b885
Showing 2 changed files with 20 additions and 16 deletions.
18 changes: 10 additions & 8 deletions drivers/edac/highbank_l2_edac.c
Original file line number Diff line number Diff line change
@@ -90,28 +90,30 @@ static int highbank_l2_err_probe(struct platform_device *pdev)
goto err;
}

dci->mod_name = dev_name(&pdev->dev);
dci->dev_name = dev_name(&pdev->dev);

if (edac_device_add_device(dci))
goto err;

drvdata->db_irq = platform_get_irq(pdev, 0);
res = devm_request_irq(&pdev->dev, drvdata->db_irq,
highbank_l2_err_handler,
0, dev_name(&pdev->dev), dci);
if (res < 0)
goto err;
goto err2;

drvdata->sb_irq = platform_get_irq(pdev, 1);
res = devm_request_irq(&pdev->dev, drvdata->sb_irq,
highbank_l2_err_handler,
0, dev_name(&pdev->dev), dci);
if (res < 0)
goto err;

dci->mod_name = dev_name(&pdev->dev);
dci->dev_name = dev_name(&pdev->dev);

if (edac_device_add_device(dci))
goto err;
goto err2;

devres_close_group(&pdev->dev, NULL);
return 0;
err2:
edac_device_del_device(&pdev->dev);
err:
devres_release_group(&pdev->dev, NULL);
edac_device_free_ctl_info(dci);
18 changes: 10 additions & 8 deletions drivers/edac/highbank_mc_edac.c
Original file line number Diff line number Diff line change
@@ -189,14 +189,6 @@ static int highbank_mc_probe(struct platform_device *pdev)
goto err;
}

irq = platform_get_irq(pdev, 0);
res = devm_request_irq(&pdev->dev, irq, highbank_mc_err_handler,
0, dev_name(&pdev->dev), mci);
if (res < 0) {
dev_err(&pdev->dev, "Unable to request irq %d\n", irq);
goto err;
}

mci->mtype_cap = MEM_FLAG_DDR3;
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
mci->edac_cap = EDAC_FLAG_SECDED;
@@ -217,10 +209,20 @@ static int highbank_mc_probe(struct platform_device *pdev)
if (res < 0)
goto err;

irq = platform_get_irq(pdev, 0);
res = devm_request_irq(&pdev->dev, irq, highbank_mc_err_handler,
0, dev_name(&pdev->dev), mci);
if (res < 0) {
dev_err(&pdev->dev, "Unable to request irq %d\n", irq);
goto err2;
}

highbank_mc_create_debugfs_nodes(mci);

devres_close_group(&pdev->dev, NULL);
return 0;
err2:
edac_mc_del_mc(&pdev->dev);
err:
devres_release_group(&pdev->dev, NULL);
edac_mc_free(mci);

0 comments on commit a72b885

Please sign in to comment.