lkml.org 
[lkml]   [2017]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 156/159] thermal/drivers/hisi: Fix kernel panic on alarm interrupt
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Daniel Lezcano <daniel.lezcano@linaro.org>

    commit 2cb4de785c40d4a2132cfc13e63828f5a28c3351 upstream.

    The threaded interrupt for the alarm interrupt is requested before the
    temperature controller is setup. This one can fire an interrupt immediately
    leading to a kernel panic as the sensor data is not initialized.

    In order to prevent that, move the threaded irq after the Tsensor is setup.

    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Reviewed-by: Leo Yan <leo.yan@linaro.org>
    Tested-by: Leo Yan <leo.yan@linaro.org>
    Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
    Signed-off-by: Kevin Wangtao <kevin.wangtao@hisilicon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/thermal/hisi_thermal.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    --- a/drivers/thermal/hisi_thermal.c
    +++ b/drivers/thermal/hisi_thermal.c
    @@ -317,15 +317,6 @@ static int hisi_thermal_probe(struct pla
    if (data->irq < 0)
    return data->irq;

    - ret = devm_request_threaded_irq(&pdev->dev, data->irq,
    - hisi_thermal_alarm_irq,
    - hisi_thermal_alarm_irq_thread,
    - 0, "hisi_thermal", data);
    - if (ret < 0) {
    - dev_err(&pdev->dev, "failed to request alarm irq: %d\n", ret);
    - return ret;
    - }
    -
    platform_set_drvdata(pdev, data);

    data->clk = devm_clk_get(&pdev->dev, "thermal_clk");
    @@ -357,6 +348,15 @@ static int hisi_thermal_probe(struct pla
    hisi_thermal_toggle_sensor(&data->sensors[i], true);
    }

    + ret = devm_request_threaded_irq(&pdev->dev, data->irq,
    + hisi_thermal_alarm_irq,
    + hisi_thermal_alarm_irq_thread,
    + 0, "hisi_thermal", data);
    + if (ret < 0) {
    + dev_err(&pdev->dev, "failed to request alarm irq: %d\n", ret);
    + return ret;
    + }
    +
    enable_irq(data->irq);

    return 0;

    \
     
     \ /
      Last update: 2017-12-22 10:13    [W:4.295 / U:0.960 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site