From: Rafael J. Wysocki Date: Tue, 28 May 2024 16:51:11 +0000 (+0200) Subject: thermal: trip: Make thermal_zone_set_trips() use trip thresholds X-Git-Tag: v6.11-rc1~174^2~3^2^2^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=893bae92237d824334d68d6b67222aaf32e41458;p=thirdparty%2Flinux.git thermal: trip: Make thermal_zone_set_trips() use trip thresholds Modify thermal_zone_set_trips() to use trip thresholds instead of computing the low temperature for each trip to avoid deriving both the high and low temperature levels from the same trip (which may happen if the zone temperature falls into the hysteresis range of one trip). Accordingly, make __thermal_zone_device_update() call thermal_zone_set_trips() later, when threshold values have been updated for all trips. Signed-off-by: Rafael J. Wysocki Acked-by: Daniel Lezcano --- diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 6acaa4b502739..57f20326aa919 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -513,13 +513,13 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz, if (tz->temperature == THERMAL_TEMP_INVALID) return; - thermal_zone_set_trips(tz); - tz->notify_event = event; for_each_trip_desc(tz, td) handle_thermal_trip(tz, td, &way_up_list, &way_down_list); + thermal_zone_set_trips(tz); + list_sort(&way_up_list, &way_up_list, thermal_trip_notify_cmp); list_for_each_entry(td, &way_up_list, notify_list_node) thermal_trip_crossed(tz, &td->trip, governor, true); diff --git a/drivers/thermal/thermal_trip.c b/drivers/thermal/thermal_trip.c index 6ab1beb9bf0d8..86f408f84f177 100644 --- a/drivers/thermal/thermal_trip.c +++ b/drivers/thermal/thermal_trip.c @@ -88,17 +88,11 @@ void thermal_zone_set_trips(struct thermal_zone_device *tz) return; for_each_trip_desc(tz, td) { - const struct thermal_trip *trip = &td->trip; - int trip_low; + if (td->threshold < tz->temperature && td->threshold > low) + low = td->threshold; - trip_low = trip->temperature - trip->hysteresis; - - if (trip_low < tz->temperature && trip_low > low) - low = trip_low; - - if (trip->temperature > tz->temperature && - trip->temperature < high) - high = trip->temperature; + if (td->threshold > tz->temperature && td->threshold < high) + high = td->threshold; } /* No need to change trip points */