Commit e2dd7a16 authored by Linus Torvalds's avatar Linus Torvalds

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()
parents e39bfb59 fb2c1024
...@@ -492,7 +492,7 @@ static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp) ...@@ -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, static int thermal_get_trend(struct thermal_zone_device *thermal,
struct thermal_trip *trip, const struct thermal_trip *trip,
enum thermal_trend *trend) enum thermal_trend *trend)
{ {
struct acpi_thermal *tz = thermal_zone_device_priv(thermal); 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) ...@@ -348,12 +348,14 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip_id)
struct thermal_trip trip; struct thermal_trip trip;
/* Ignore disabled trip points */ /* Ignore disabled trip points */
if (test_bit(trip_id, &tz->trips_disabled) || if (test_bit(trip_id, &tz->trips_disabled))
trip.temperature == THERMAL_TEMP_INVALID)
return; return;
__thermal_zone_get_trip(tz, trip_id, &trip); __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 != THERMAL_TEMP_INVALID) {
if (tz->last_temperature < trip.temperature && if (tz->last_temperature < trip.temperature &&
tz->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) ...@@ -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) { for_each_child_of_node(trips, t) {
if (t == trip) if (t == trip) {
of_node_put(t);
goto out; goto out;
}
i++; i++;
} }
...@@ -401,8 +403,10 @@ static int thermal_of_for_each_cooling_maps(struct thermal_zone_device *tz, ...@@ -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) { for_each_child_of_node(cm_np, child) {
ret = thermal_of_for_each_cooling_device(tz_np, child, tz, cdev, action); ret = thermal_of_for_each_cooling_device(tz_np, child, tz, cdev, action);
if (ret) if (ret) {
of_node_put(child);
break; break;
}
} }
of_node_put(cm_np); of_node_put(cm_np);
......
...@@ -110,7 +110,8 @@ static inline int __ti_thermal_get_temp(struct thermal_zone_device *tz, int *tem ...@@ -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, 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_thermal_data *data = thermal_zone_device_priv(tz);
struct ti_bandgap *bgp; struct ti_bandgap *bgp;
......
...@@ -80,8 +80,8 @@ struct thermal_zone_device_ops { ...@@ -80,8 +80,8 @@ struct thermal_zone_device_ops {
int (*set_trip_hyst) (struct thermal_zone_device *, int, int); int (*set_trip_hyst) (struct thermal_zone_device *, int, int);
int (*get_crit_temp) (struct thermal_zone_device *, int *); int (*get_crit_temp) (struct thermal_zone_device *, int *);
int (*set_emul_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 *, int (*get_trend) (struct thermal_zone_device *,
enum thermal_trend *); const struct thermal_trip *, enum thermal_trend *);
void (*hot)(struct thermal_zone_device *); void (*hot)(struct thermal_zone_device *);
void (*critical)(struct thermal_zone_device *); void (*critical)(struct thermal_zone_device *);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment