mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 23:05:25 -04:00
thermal: trip: Avoid skipping trips in thermal_zone_set_trips()
Say there are 3 trip points A, B, C sorted in ascending temperature
order with no hysteresis. If the zone temerature is exactly equal to
B, thermal_zone_set_trips() will set the boundaries to A and C and the
hardware will not catch any crossing of B (either way) until either A
or C is crossed and the boundaries are changed.
To avoid that, use non-strict inequalities when comparing the trip
threshold to the zone temperature in thermal_zone_set_trips().
In the example above, it will cause both boundaries to be set to B,
which is desirable because an interrupt will trigger when the zone
temperature becomes different from B regardless of which way it goes.
That will allow a new interval to be set depending on the direction of
the zone temperature change.
Fixes: 893bae9223 ("thermal: trip: Make thermal_zone_set_trips() use trip thresholds")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/12509184.O9o76ZdvQC@rjwysocki.net
This commit is contained in:
@@ -88,10 +88,10 @@ void thermal_zone_set_trips(struct thermal_zone_device *tz)
|
||||
return;
|
||||
|
||||
for_each_trip_desc(tz, td) {
|
||||
if (td->threshold < tz->temperature && td->threshold > low)
|
||||
if (td->threshold <= tz->temperature && td->threshold > low)
|
||||
low = td->threshold;
|
||||
|
||||
if (td->threshold > tz->temperature && td->threshold < high)
|
||||
if (td->threshold >= tz->temperature && td->threshold < high)
|
||||
high = td->threshold;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user