Skip to content

Commit

Permalink
thermal/debugfs: Add thermal cooling device debugfs information
Browse files Browse the repository at this point in the history
The thermal framework does not have any debug information except a
sysfs stat which is a bit controversial. This one allocates big chunks
of memory for every cooling devices with a high number of states and
could represent on some systems in production several megabytes of
memory for just a portion of it. As the sysfs is limited to a page
size, the output is not exploitable with large data array and gets
truncated.

The patch provides the same information than sysfs except the
transitions are dynamically allocated, thus they won't show more
events than the ones which actually occurred. There is no longer a
size limitation and it opens the field for more debugging information
where the debugfs is designed for, not sysfs.

The thermal debugfs directory structure tries to stay consistent with
the sysfs one but in a very simplified way:

thermal/
 -- cooling_devices
    |-- 0
    |   |-- clear
    |   |-- time_in_state_ms
    |   |-- total_trans
    |   `-- trans_table
    |-- 1
    |   |-- clear
    |   |-- time_in_state_ms
    |   |-- total_trans
    |   `-- trans_table
    |-- 2
    |   |-- clear
    |   |-- time_in_state_ms
    |   |-- total_trans
    |   `-- trans_table
    |-- 3
    |   |-- clear
    |   |-- time_in_state_ms
    |   |-- total_trans
    |   `-- trans_table
    `-- 4
        |-- clear
        |-- time_in_state_ms
        |-- total_trans
        `-- trans_table

The content of the files in the cooling devices directory is the same
as the sysfs one except for the trans_table which has the following
format:

Transition	Hits
1->0      	246
0->1      	246
2->1      	632
1->2      	632
3->2      	98
2->3      	98

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>
  • Loading branch information
Daniel Lezcano authored and Rafael J. Wysocki committed Jan 12, 2024
1 parent 2f52189 commit 755113d
Show file tree
Hide file tree
Showing 8 changed files with 497 additions and 6 deletions.
7 changes: 7 additions & 0 deletions drivers/thermal/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ config THERMAL_STATISTICS

If in doubt, say N.

config THERMAL_DEBUGFS
bool "Thermal subsystem debug support"
depends on DEBUG_FS
help
Say Y to allow the thermal subsystem to collect diagnostic
information that can be accessed via debugfs.

config THERMAL_EMERGENCY_POWEROFF_DELAY_MS
int "Emergency poweroff delay in milli-seconds"
default 0
Expand Down
2 changes: 2 additions & 0 deletions drivers/thermal/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ thermal_sys-y += thermal_trip.o thermal_helpers.o
# netlink interface to manage the thermal framework
thermal_sys-$(CONFIG_THERMAL_NETLINK) += thermal_netlink.o

thermal_sys-$(CONFIG_THERMAL_DEBUGFS) += thermal_debugfs.o

# interface to/from other layers providing sensors
thermal_sys-$(CONFIG_THERMAL_HWMON) += thermal_hwmon.o
thermal_sys-$(CONFIG_THERMAL_OF) += thermal_of.o
Expand Down
6 changes: 6 additions & 0 deletions drivers/thermal/thermal_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -960,6 +960,8 @@ __thermal_cooling_device_register(struct device_node *np,

mutex_unlock(&thermal_list_lock);

thermal_debug_cdev_add(cdev);

return cdev;

out_cooling_dev:
Expand Down Expand Up @@ -1166,6 +1168,8 @@ void thermal_cooling_device_unregister(struct thermal_cooling_device *cdev)
if (!cdev)
return;

thermal_debug_cdev_remove(cdev);

mutex_lock(&thermal_list_lock);

if (!thermal_cooling_device_present(cdev)) {
Expand Down Expand Up @@ -1629,6 +1633,8 @@ static int __init thermal_init(void)
{
int result;

thermal_debug_init();

result = thermal_netlink_init();
if (result)
goto error;
Expand Down
1 change: 1 addition & 0 deletions drivers/thermal/thermal_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <linux/thermal.h>

#include "thermal_netlink.h"
#include "thermal_debugfs.h"

/* Default Thermal Governor */
#if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE)
Expand Down
Loading

0 comments on commit 755113d

Please sign in to comment.