lkml.org 
[lkml]   [2013]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.11 142/272] edac, highbank: Fix interrupt setup of mem and l2 controller
    Date
    3.11.10.1 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Robert Richter <robert.richter@linaro.org>

    commit a72b8859fd3941cc1d2940d5c43026d2c6fb959e upstream.

    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>
    Signed-off-by: Robert Richter <rric@kernel.org>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/edac/highbank_l2_edac.c | 18 ++++++++++--------
    drivers/edac/highbank_mc_edac.c | 18 ++++++++++--------
    2 files changed, 20 insertions(+), 16 deletions(-)

    diff --git a/drivers/edac/highbank_l2_edac.c b/drivers/edac/highbank_l2_edac.c
    index c2bd8c6..10d3d29 100644
    --- a/drivers/edac/highbank_l2_edac.c
    +++ b/drivers/edac/highbank_l2_edac.c
    @@ -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);
    diff --git a/drivers/edac/highbank_mc_edac.c b/drivers/edac/highbank_mc_edac.c
    index 4695dd2..7a78307 100644
    --- a/drivers/edac/highbank_mc_edac.c
    +++ b/drivers/edac/highbank_mc_edac.c
    @@ -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);
    --
    1.8.3.2


    \
     
     \ /
      Last update: 2013-12-06 15:01    [W:3.039 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site