thermal/drivers/hisi: Fix kernel panic on alarm interrupt
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>
This commit is contained in:
parent
ff4ec2997d
commit
2cb4de785c
@ -287,15 +287,6 @@ static int hisi_thermal_probe(struct platform_device *pdev)
|
||||
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");
|
||||
@ -328,6 +319,15 @@ static int hisi_thermal_probe(struct platform_device *pdev)
|
||||
|
||||
hisi_thermal_toggle_sensor(&data->sensors, 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;
|
||||
|
Loading…
Reference in New Issue
Block a user