Commit e2dd7a16 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+4 −2
Original line number Diff line number Diff line
@@ -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)
+6 −2
Original line number Diff line number Diff line
@@ -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,9 +403,11 @@ 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);
out:
+2 −1
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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 *);
};