Merge tag 'thermal-6.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull thermal control fixes from Rafael Wysocki:
"These fix a thermal core breakage introduced by one of the recent
changes, amend those changes by adding 'const' to a new callback
argument and fix two memory leaks.
Specifics:
- Unbreak disabled trip point check in handle_thermal_trip() that may
cause it to skip enabled trip points (Rafael Wysocki)
- Add missing of_node_put() to of_find_trip_id() and
thermal_of_for_each_cooling_maps() that each break out of a
for_each_child_of_node() loop without dropping the reference to the
child object (Julia Lawall)
- Constify the recently added trip argument of the .get_trend()
thermal zone callback (Rafael Wysocki)"
* tag 'thermal-6.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
thermal: core: Fix disabled trip point check in handle_thermal_trip()
thermal: Constify the trip argument of the .get_trend() zone callback
thermal/of: add missing of_node_put()
This commit is contained in:
@@ -492,7 +492,7 @@ static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
|
||||
}
|
||||
|
||||
static int thermal_get_trend(struct thermal_zone_device *thermal,
|
||||
struct thermal_trip *trip,
|
||||
const struct thermal_trip *trip,
|
||||
enum thermal_trend *trend)
|
||||
{
|
||||
struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
|
||||
|
||||
@@ -348,12 +348,14 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip_id)
|
||||
struct thermal_trip trip;
|
||||
|
||||
/* Ignore disabled trip points */
|
||||
if (test_bit(trip_id, &tz->trips_disabled) ||
|
||||
trip.temperature == THERMAL_TEMP_INVALID)
|
||||
if (test_bit(trip_id, &tz->trips_disabled))
|
||||
return;
|
||||
|
||||
__thermal_zone_get_trip(tz, trip_id, &trip);
|
||||
|
||||
if (trip.temperature == THERMAL_TEMP_INVALID)
|
||||
return;
|
||||
|
||||
if (tz->last_temperature != THERMAL_TEMP_INVALID) {
|
||||
if (tz->last_temperature < trip.temperature &&
|
||||
tz->temperature >= trip.temperature)
|
||||
|
||||
@@ -37,8 +37,10 @@ static int of_find_trip_id(struct device_node *np, struct device_node *trip)
|
||||
*/
|
||||
for_each_child_of_node(trips, t) {
|
||||
|
||||
if (t == trip)
|
||||
if (t == trip) {
|
||||
of_node_put(t);
|
||||
goto out;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -401,8 +403,10 @@ static int thermal_of_for_each_cooling_maps(struct thermal_zone_device *tz,
|
||||
|
||||
for_each_child_of_node(cm_np, child) {
|
||||
ret = thermal_of_for_each_cooling_device(tz_np, child, tz, cdev, action);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
of_node_put(cm_np);
|
||||
|
||||
@@ -110,7 +110,8 @@ static inline int __ti_thermal_get_temp(struct thermal_zone_device *tz, int *tem
|
||||
}
|
||||
|
||||
static int __ti_thermal_get_trend(struct thermal_zone_device *tz,
|
||||
struct thermal_trip *trip, enum thermal_trend *trend)
|
||||
const struct thermal_trip *trip,
|
||||
enum thermal_trend *trend)
|
||||
{
|
||||
struct ti_thermal_data *data = thermal_zone_device_priv(tz);
|
||||
struct ti_bandgap *bgp;
|
||||
|
||||
@@ -80,8 +80,8 @@ struct thermal_zone_device_ops {
|
||||
int (*set_trip_hyst) (struct thermal_zone_device *, int, int);
|
||||
int (*get_crit_temp) (struct thermal_zone_device *, int *);
|
||||
int (*set_emul_temp) (struct thermal_zone_device *, int);
|
||||
int (*get_trend) (struct thermal_zone_device *, struct thermal_trip *,
|
||||
enum thermal_trend *);
|
||||
int (*get_trend) (struct thermal_zone_device *,
|
||||
const struct thermal_trip *, enum thermal_trend *);
|
||||
void (*hot)(struct thermal_zone_device *);
|
||||
void (*critical)(struct thermal_zone_device *);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user