thermal: core: Fix disabled trip point check in handle_thermal_trip()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 14 Sep 2023 19:42:20 +0000 (21:42 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 14 Sep 2023 19:51:49 +0000 (21:51 +0200)
Commit bc840ea5f9a9 ("thermal: core: Do not handle trip points with
invalid temperature") added a check for invalid temperature to the
disabled trip point check in handle_thermal_trip(), but that check was
added at a point when the trip structure has not been initialized yet.

This may cause handle_thermal_trip() to skip a valid trip point in some
cases, so fix it by moving the check to a suitable place, after
__thermal_zone_get_trip() has been called to populate the trip
structure.

Fixes: bc840ea5f9a9 ("thermal: core: Do not handle trip points with invalid temperature")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/thermal_core.c

index 8717a33435125ca33009e79afd89983c1a742dda..58533ea75cd92563a19acd07e37f9095031eb9a7 100644 (file)
@@ -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)