linux-brain/drivers/thermal
Daniel Lezcano 3cff90788e thermal/drivers/hisi: Fix multiple alarm interrupts firing
commit db2b033260 upstream.

The DT specifies a threshold of 65000, we setup the register with a value in
the temperature resolution for the controller, 64656.

When we reach 64656, the interrupt fires, the interrupt is disabled. Then the
irq thread runs and calls thermal_zone_device_update() which will call in turn
hisi_thermal_get_temp().

The function will look if the temperature decreased, assuming it was more than
65000, but that is not the case because the current temperature is 64656
(because of the rounding when setting the threshold). This condition being
true, we re-enable the interrupt which fires immediately after exiting the irq
thread. That happens again and again until the temperature goes to more than
65000.

Potentially, there is here an interrupt storm if the temperature stabilizes at
this temperature. A very unlikely case but possible.

In any case, it does not make sense to handle dozens of alarm interrupt for
nothing.

Fix this by rounding the threshold value to the controller resolution so the
check against the threshold is consistent with the one set in the controller.

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>
2017-12-25 14:23:46 +01:00
..
int340x_thermal thermal: int3403: Process trip change notification 2016-09-27 14:37:17 +08:00
qcom thermal: qcom: tsens: Fix return value check in init_common() 2016-09-27 14:02:16 +08:00
samsung thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
st thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
tegra thermal: tegra: add hw-throttle for Tegra132 2016-09-27 14:02:32 +08:00
ti-soc-thermal thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
Kconfig Merge branches 'thermal-soc', 'thermal-core', 'thermal-intel' and 'thermal-tegra-hw-throttle' into next 2016-09-27 14:03:19 +08:00
Makefile Merge branches 'thermal-soc', 'thermal-core', 'thermal-intel' and 'thermal-tegra-hw-throttle' into next 2016-09-27 14:03:19 +08:00
armada_thermal.c thermal: armada: Fix possible overflow in the Armada 380 thermal sensor formula 2015-10-30 11:33:23 -07:00
clock_cooling.c thermal: clock_cooling: Fix missing mutex_init() 2016-08-08 10:57:39 +08:00
cpu_cooling.c thermal: cpu_cooling: Avoid accessing potentially freed structures 2017-07-27 15:07:55 -07:00
db8500_cpufreq_cooling.c thermal: db8500_cpufreq_cooling: Fix module autoload for OF platform driver 2015-09-13 20:26:19 -07:00
db8500_thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
devfreq_cooling.c devfreq_cooling: no need to check state with negative number 2016-09-27 14:02:16 +08:00
dove_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
fair_share.c thermal: fix race condition when updating cooling device 2016-08-08 10:57:39 +08:00
gov_bang_bang.c thermal: bang-bang governor: act on lower trip boundary 2016-09-27 14:02:16 +08:00
hisi_thermal.c thermal/drivers/hisi: Fix multiple alarm interrupts firing 2017-12-25 14:23:46 +01:00
imx_thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
intel_bxt_pmic_thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
intel_pch_thermal.c thermal: intel_pch_thermal: Enable Haswell PCH 2016-10-20 14:15:44 +08:00
intel_powerclamp.c thermal/powerclamp: add back module device table 2016-11-21 20:54:40 +08:00
intel_quark_dts_thermal.c x86/platform/iosf_mbi: Remove duplicate definitions 2015-12-09 01:18:34 +01:00
intel_soc_dts_iosf.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
intel_soc_dts_iosf.h Thermal: Intel SoC: DTS thermal IOSF core 2015-05-01 11:20:42 +08:00
intel_soc_dts_thermal.c x86, thermal: Clean up and fix CPU model detection for intel_soc_dts_thermal 2016-06-08 13:03:26 +02:00
kirkwood_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
max77620_thermal.c thermal: max77620: fix device-node reference imbalance 2017-07-27 15:07:55 -07:00
mtk_thermal.c thermal: mtk_thermal: Check return value of devm_thermal_zone_of_sensor_register 2016-09-27 14:02:16 +08:00
of-thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
power_allocator.c thermal: fix race condition when updating cooling device 2016-08-08 10:57:39 +08:00
qcom-spmi-temp-alarm.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
qoriq_thermal.c thermal: qoriq: Add thermal management support 2016-09-27 14:02:16 +08:00
rcar_thermal.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2016-10-12 11:05:23 -07:00
rockchip_thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
spear_thermal.c thermal: spear: use __maybe_unused for PM functions 2016-02-09 14:12:08 -08:00
step_wise.c thermal/drivers/step_wise: Fix temperature regulation misbehavior 2017-12-20 10:07:30 +01:00
tango_thermal.c thermal: tango: add resume support 2016-09-27 14:02:16 +08:00
thermal-generic-adc.c thermal: generic-adc: Add ADC based thermal sensor driver 2016-05-17 07:28:31 -07:00
thermal_core.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00
thermal_core.h Thermal: initialize thermal zone device correctly 2015-12-29 15:59:44 +08:00
thermal_hwmon.c thermal: hwmon: Properly report critical temperature in sysfs 2017-01-09 08:32:18 +01:00
thermal_hwmon.h thermal: hwmon: move hwmon support to single file 2013-09-03 09:09:12 -04:00
user_space.c thermal: user_space gov: Add additional information in uevent 2016-09-27 14:37:10 +08:00
x86_pkg_temp_thermal.c thermal: Enhance thermal_zone_device_update for events 2016-09-27 14:35:21 +08:00