forked from Minki/linux
- Fix bogus thermal shutdowns for omap4430 where bogus values
resulting from an incorrect ADC conversion are too high and fire an emergency shutdown (Tony Lindgren) - Don't suppress negative temp for qcom spmi as they are valid and userspace needs them (Veera Vegivada) - Fix use-after-free in thermal_zone_device_unregister reported by Kasan (Dmitry Osipenko) -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEGn3N4YVz0WNVyHskqDIjiipP6E8FAl9SDqQACgkQqDIjiipP 6E9/qwf/WybOihgjeQUv3a9f4k6SeJphoDZRNATJtyU1e+fgJXUxjFqma6t4CYJv uphZ1SppY9rnx1nWzhANSQjKun5KLwIskcNTCaGN4adRJ1cNdY63PdSX9BTJr9+H w5H0AGWMErAOdmCPCro4pnZ3l3FPKXcoNvqDAjF1kZ97v5tMGzdInflOJl1ztUZA scAnY7j0TyNsoRy2TV0oxQtSN9cDhgph1zJF1RcVzlU1uD897Htet1RF/PrHDvBW NYVcWDTfiWmvf9Zewy2+cfApK9QGqBRhnwt4Z8PlTUcqrOgqAiNnOAnov+Topg/y XNQzWwXFUip6bk5pTXPF8gSI0glkJg== =LDGk -----END PGP SIGNATURE----- Merge tag 'thermal-v5.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux Pull thermal fixes from Daniel Lezcano: - Fix bogus thermal shutdowns for omap4430 where bogus values resulting from an incorrect ADC conversion are too high and fire an emergency shutdown (Tony Lindgren) - Don't suppress negative temp for qcom spmi as they are valid and userspace needs them (Veera Vegivada) - Fix use-after-free in thermal_zone_device_unregister reported by Kasan (Dmitry Osipenko) * tag 'thermal-v5.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux: thermal: core: Fix use-after-free in thermal_zone_device_unregister() thermal: qcom-spmi-temp-alarm: Don't suppress negative temp thermal: ti-soc-thermal: Fix bogus thermal shutdowns for omap4430
This commit is contained in:
commit
2fb547911c
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2011-2015, 2017, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2015, 2017, 2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
@ -191,7 +191,7 @@ static int qpnp_tm_get_temp(void *data, int *temp)
|
||||
chip->temp = mili_celsius;
|
||||
}
|
||||
|
||||
*temp = chip->temp < 0 ? 0 : chip->temp;
|
||||
*temp = chip->temp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1516,7 +1516,7 @@ EXPORT_SYMBOL_GPL(thermal_zone_device_register);
|
||||
*/
|
||||
void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
||||
{
|
||||
int i;
|
||||
int i, tz_id;
|
||||
const struct thermal_zone_params *tzp;
|
||||
struct thermal_cooling_device *cdev;
|
||||
struct thermal_zone_device *pos = NULL;
|
||||
@ -1525,6 +1525,7 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
||||
return;
|
||||
|
||||
tzp = tz->tzp;
|
||||
tz_id = tz->id;
|
||||
|
||||
mutex_lock(&thermal_list_lock);
|
||||
list_for_each_entry(pos, &thermal_tz_list, node)
|
||||
@ -1567,7 +1568,7 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
||||
mutex_destroy(&tz->lock);
|
||||
device_unregister(&tz->device);
|
||||
|
||||
thermal_notify_tz_delete(tz->id);
|
||||
thermal_notify_tz_delete(tz_id);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(thermal_zone_device_unregister);
|
||||
|
||||
|
@ -37,20 +37,21 @@ static struct temp_sensor_data omap4430_mpu_temp_sensor_data = {
|
||||
|
||||
/*
|
||||
* Temperature values in milli degree celsius
|
||||
* ADC code values from 530 to 923
|
||||
* ADC code values from 13 to 107, see TRM
|
||||
* "18.4.10.2.3 ADC Codes Versus Temperature".
|
||||
*/
|
||||
static const int
|
||||
omap4430_adc_to_temp[OMAP4430_ADC_END_VALUE - OMAP4430_ADC_START_VALUE + 1] = {
|
||||
-38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000, -22000,
|
||||
-20000, -18000, -17000, -15000, -13000, -12000, -10000, -8000, -6000,
|
||||
-5000, -3000, -1000, 0, 2000, 3000, 5000, 6000, 8000, 10000, 12000,
|
||||
13000, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28000, 30000,
|
||||
32000, 33000, 35000, 37000, 38000, 40000, 42000, 43000, 45000, 47000,
|
||||
48000, 50000, 52000, 53000, 55000, 57000, 58000, 60000, 62000, 64000,
|
||||
66000, 68000, 70000, 71000, 73000, 75000, 77000, 78000, 80000, 82000,
|
||||
83000, 85000, 87000, 88000, 90000, 92000, 93000, 95000, 97000, 98000,
|
||||
100000, 102000, 103000, 105000, 107000, 109000, 111000, 113000, 115000,
|
||||
117000, 118000, 120000, 122000, 123000,
|
||||
-40000, -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000,
|
||||
-22000, -20000, -18500, -17000, -15000, -13500, -12000, -10000, -8000,
|
||||
-6500, -5000, -3500, -1500, 0, 2000, 3500, 5000, 6500, 8500, 10000,
|
||||
12000, 13500, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500,
|
||||
30000, 32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,
|
||||
47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000, 62000,
|
||||
64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000, 78500, 80000,
|
||||
82000, 83500, 85000, 87000, 88500, 90000, 92000, 93500, 95000, 97000,
|
||||
98500, 100000, 102000, 103500, 105000, 107000, 109000, 111000, 113000,
|
||||
115000, 117000, 118500, 120000, 122000, 123500, 125000,
|
||||
};
|
||||
|
||||
/* OMAP4430 data */
|
||||
|
@ -53,9 +53,13 @@
|
||||
* and thresholds for OMAP4430.
|
||||
*/
|
||||
|
||||
/* ADC conversion table limits */
|
||||
#define OMAP4430_ADC_START_VALUE 0
|
||||
#define OMAP4430_ADC_END_VALUE 127
|
||||
/*
|
||||
* ADC conversion table limits. Ignore values outside the TRM listed
|
||||
* range to avoid bogus thermal shutdowns. See omap4430 TRM chapter
|
||||
* "18.4.10.2.3 ADC Codes Versus Temperature".
|
||||
*/
|
||||
#define OMAP4430_ADC_START_VALUE 13
|
||||
#define OMAP4430_ADC_END_VALUE 107
|
||||
/* bandgap clock limits (no control on 4430) */
|
||||
#define OMAP4430_MAX_FREQ 32768
|
||||
#define OMAP4430_MIN_FREQ 32768
|
||||
|
Loading…
Reference in New Issue
Block a user