Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1366176
| From | Leo Yan <leo.yan@linaro.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v3 2/4] thermal: hisilicon: fix IRQ imbalance enabling |
| Date | 2016-03-29 13:30 +0200 |
| Message-ID | <ri00r-5tz-39@gated-at.bofh.it> (permalink) |
| References | <ri00q-5tz-11@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
When register sensors into thermal zone during initialization phase, it
reports error for IRQ imbalance enabling:
[ 2.040713] WARNING: at kernel/irq/manage.c:513
[ 2.040719] Modules linked in:
[ 2.040721]
[ 2.040729] CPU: 1 PID: 804 Comm: irq/33-hisi_the Not tainted 4.5.0-rc4+ #505
[ 2.040732] Hardware name: HiKey Development Board (DT)
[ 2.040736] task: ffffffc03ae82580 ti: ffffffc0379c8000 task.ti: ffffffc0379c8000
[ 2.040745] PC is at __enable_irq+0x74/0x84
[ 2.040749] LR is at __enable_irq+0x74/0x84
This warning is for IRQ imbalance enabling, which is caused by
enable_irq() twice. During sensor's initialization it tries to enable
IRQ, the driver will call thermal_zone_of_sensor_register() to bind
sensors and read sensor's temperature. But at this moment the flag
"data->irq_enabled" has been not initialized as correct state, so it
finally introduces the function enabled_irq() to be called twice. In
essentially this is caused by the flag "data->irq_enabled" is
inconsistent with real hardware IRQ enabling state.
So this patch is to fix this issue, firstly init "irq_enabled" flag
before binding sensors to thermal zone. Also change to use the function
irq_get_irqchip_state() to read back real interrupt line state.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
drivers/thermal/hisi_thermal.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
index 0fed5cf..4fef1b3 100644
--- a/drivers/thermal/hisi_thermal.c
+++ b/drivers/thermal/hisi_thermal.c
@@ -343,6 +343,10 @@ static int hisi_thermal_probe(struct platform_device *pdev)
return ret;
}
+ hisi_thermal_enable_bind_irq_sensor(data);
+ irq_get_irqchip_state(data->irq, IRQCHIP_STATE_MASKED,
+ &data->irq_enabled);
+
for (i = 0; i < HISI_MAX_SENSORS; ++i) {
ret = hisi_thermal_register_sensor(pdev, data,
&data->sensors[i], i);
@@ -353,9 +357,6 @@ static int hisi_thermal_probe(struct platform_device *pdev)
hisi_thermal_toggle_sensor(&data->sensors[i], true);
}
- hisi_thermal_enable_bind_irq_sensor(data);
- data->irq_enabled = true;
-
return 0;
}
--
1.9.1
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v3 0/4] thermal: hisilicon: enable power allocator for Hi6220 Leo Yan <leo.yan@linaro.org> - 2016-03-29 13:30 +0200
[PATCH v3 4/4] arm64: dts: register Hi6220's thermal zone for power allocator Leo Yan <leo.yan@linaro.org> - 2016-03-29 13:30 +0200
[PATCH v3 3/4] arm64: dts: register Hi6220's thermal sensor Leo Yan <leo.yan@linaro.org> - 2016-03-29 13:30 +0200
[PATCH v3 2/4] thermal: hisilicon: fix IRQ imbalance enabling Leo Yan <leo.yan@linaro.org> - 2016-03-29 13:30 +0200
Re: [PATCH v3 0/4] thermal: hisilicon: enable power allocator for Hi6220 Eduardo Valentin <edubezval@gmail.com> - 2016-03-29 17:50 +0200
Re: [PATCH v3 0/4] thermal: hisilicon: enable power allocator for Hi6220 Leo Yan <leo.yan@linaro.org> - 2016-03-30 05:00 +0200
Re: [PATCH v3 0/4] thermal: hisilicon: enable power allocator for Hi6220 Wei Xu <xuwei5@hisilicon.com> - 2016-03-30 17:20 +0200
csiph-web