Skip to content

Commit 7ef01f2

Browse files
dlezcanorafaeljw
authored andcommitted
thermal/debugfs: Add thermal debugfs information for mitigation episodes
The mitigation episodes are recorded. A mitigation episode happens when the first trip point is crossed the way up and then the way down. During this episode other trip points can be crossed also and are accounted for this mitigation episode. The interesting information is the average temperature at the trip point, the undershot and the overshot. The standard deviation of the mitigated temperature will be added later. The thermal debugfs directory structure tries to stay consistent with the sysfs one but in a very simplified way: thermal/ `-- thermal_zones |-- 0 | `-- mitigations `-- 1 `-- mitigations The content of the mitigations file has the following format: ,-Mitigation at 349988258us, duration=130136ms | trip | type | temp(°mC) | hyst(°mC) | duration | avg(°mC) | min(°mC) | max(°mC) | | 0 | passive | 65000 | 2000 | 130136 | 68227 | 62500 | 75625 | | 1 | passive | 75000 | 2000 | 104209 | 74857 | 71666 | 77500 | ,-Mitigation at 272451637us, duration=75000ms | trip | type | temp(°mC) | hyst(°mC) | duration | avg(°mC) | min(°mC) | max(°mC) | | 0 | passive | 65000 | 2000 | 75000 | 68561 | 62500 | 75000 | | 1 | passive | 75000 | 2000 | 60714 | 74820 | 70555 | 77500 | ,-Mitigation at 238184119us, duration=27316ms | trip | type | temp(°mC) | hyst(°mC) | duration | avg(°mC) | min(°mC) | max(°mC) | | 0 | passive | 65000 | 2000 | 27316 | 73377 | 62500 | 75000 | | 1 | passive | 75000 | 2000 | 19468 | 75284 | 69444 | 77500 | ,-Mitigation at 39863713us, duration=136196ms | trip | type | temp(°mC) | hyst(°mC) | duration | avg(°mC) | min(°mC) | max(°mC) | | 0 | passive | 65000 | 2000 | 136196 | 73922 | 62500 | 75000 | | 1 | passive | 75000 | 2000 | 91721 | 74386 | 69444 | 78125 | More information for a better understanding of the thermal behavior will be added after. The idea is to give detailed statistics information about the undershots and overshots, the temperature speed, etc... As all the information in a single file is too much, the idea would be to create a directory named with the mitigation timestamp where all data could be added. Please note this code is immune against trip ordering but not against a trip temperature change while a mitigation is happening. However, this situation should be extremely rare, perhaps not happening and we might question ourselves if something should be done in the core framework for other components first. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> [ rjw: White space fixups, rebase ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 755113d commit 7ef01f2

3 files changed

Lines changed: 417 additions & 4 deletions

File tree

drivers/thermal/thermal_core.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ static void handle_thermal_trip(struct thermal_zone_device *tz,
382382
*/
383383
if (tz->temperature >= trip->temperature) {
384384
thermal_notify_tz_trip_up(tz, trip);
385+
thermal_debug_tz_trip_up(tz, trip);
385386
trip->threshold = trip->temperature - trip->hysteresis;
386387
} else {
387388
trip->threshold = trip->temperature;
@@ -399,6 +400,7 @@ static void handle_thermal_trip(struct thermal_zone_device *tz,
399400
*/
400401
if (tz->temperature < trip->temperature - trip->hysteresis) {
401402
thermal_notify_tz_trip_down(tz, trip);
403+
thermal_debug_tz_trip_down(tz, trip);
402404
trip->threshold = trip->temperature;
403405
} else {
404406
trip->threshold = trip->temperature - trip->hysteresis;
@@ -430,6 +432,7 @@ static void update_temperature(struct thermal_zone_device *tz)
430432
trace_thermal_temperature(tz);
431433

432434
thermal_genl_sampling_temp(tz->id, temp);
435+
thermal_debug_update_temp(tz);
433436
}
434437

435438
static void thermal_zone_device_check(struct work_struct *work)
@@ -1413,6 +1416,8 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t
14131416

14141417
thermal_notify_tz_create(tz);
14151418

1419+
thermal_debug_tz_add(tz);
1420+
14161421
return tz;
14171422

14181423
unregister:
@@ -1476,6 +1481,8 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
14761481
if (!tz)
14771482
return;
14781483

1484+
thermal_debug_tz_remove(tz);
1485+
14791486
mutex_lock(&thermal_list_lock);
14801487
list_for_each_entry(pos, &thermal_tz_list, node)
14811488
if (pos == tz)

0 commit comments

Comments
 (0)