linux/include/trace/events/thermal.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#undef TRACE_SYSTEM
   3#define TRACE_SYSTEM thermal
   4
   5#if !defined(_TRACE_THERMAL_H) || defined(TRACE_HEADER_MULTI_READ)
   6#define _TRACE_THERMAL_H
   7
   8#include <linux/devfreq.h>
   9#include <linux/thermal.h>
  10#include <linux/tracepoint.h>
  11
  12TRACE_DEFINE_ENUM(THERMAL_TRIP_CRITICAL);
  13TRACE_DEFINE_ENUM(THERMAL_TRIP_HOT);
  14TRACE_DEFINE_ENUM(THERMAL_TRIP_PASSIVE);
  15TRACE_DEFINE_ENUM(THERMAL_TRIP_ACTIVE);
  16
  17#define show_tzt_type(type)                                     \
  18        __print_symbolic(type,                                  \
  19                         { THERMAL_TRIP_CRITICAL, "CRITICAL"},  \
  20                         { THERMAL_TRIP_HOT,      "HOT"},       \
  21                         { THERMAL_TRIP_PASSIVE,  "PASSIVE"},   \
  22                         { THERMAL_TRIP_ACTIVE,   "ACTIVE"})
  23
  24TRACE_EVENT(thermal_temperature,
  25
  26        TP_PROTO(struct thermal_zone_device *tz),
  27
  28        TP_ARGS(tz),
  29
  30        TP_STRUCT__entry(
  31                __string(thermal_zone, tz->type)
  32                __field(int, id)
  33                __field(int, temp_prev)
  34                __field(int, temp)
  35        ),
  36
  37        TP_fast_assign(
  38                __assign_str(thermal_zone, tz->type);
  39                __entry->id = tz->id;
  40                __entry->temp_prev = tz->last_temperature;
  41                __entry->temp = tz->temperature;
  42        ),
  43
  44        TP_printk("thermal_zone=%s id=%d temp_prev=%d temp=%d",
  45                __get_str(thermal_zone), __entry->id, __entry->temp_prev,
  46                __entry->temp)
  47);
  48
  49TRACE_EVENT(cdev_update,
  50
  51        TP_PROTO(struct thermal_cooling_device *cdev, unsigned long target),
  52
  53        TP_ARGS(cdev, target),
  54
  55        TP_STRUCT__entry(
  56                __string(type, cdev->type)
  57                __field(unsigned long, target)
  58        ),
  59
  60        TP_fast_assign(
  61                __assign_str(type, cdev->type);
  62                __entry->target = target;
  63        ),
  64
  65        TP_printk("type=%s target=%lu", __get_str(type), __entry->target)
  66);
  67
  68TRACE_EVENT(thermal_zone_trip,
  69
  70        TP_PROTO(struct thermal_zone_device *tz, int trip,
  71                enum thermal_trip_type trip_type),
  72
  73        TP_ARGS(tz, trip, trip_type),
  74
  75        TP_STRUCT__entry(
  76                __string(thermal_zone, tz->type)
  77                __field(int, id)
  78                __field(int, trip)
  79                __field(enum thermal_trip_type, trip_type)
  80        ),
  81
  82        TP_fast_assign(
  83                __assign_str(thermal_zone, tz->type);
  84                __entry->id = tz->id;
  85                __entry->trip = trip;
  86                __entry->trip_type = trip_type;
  87        ),
  88
  89        TP_printk("thermal_zone=%s id=%d trip=%d trip_type=%s",
  90                __get_str(thermal_zone), __entry->id, __entry->trip,
  91                show_tzt_type(__entry->trip_type))
  92);
  93
  94#ifdef CONFIG_CPU_THERMAL
  95TRACE_EVENT(thermal_power_cpu_get_power,
  96        TP_PROTO(const struct cpumask *cpus, unsigned long freq, u32 *load,
  97                size_t load_len, u32 dynamic_power),
  98
  99        TP_ARGS(cpus, freq, load, load_len, dynamic_power),
 100
 101        TP_STRUCT__entry(
 102                __bitmask(cpumask, num_possible_cpus())
 103                __field(unsigned long, freq          )
 104                __dynamic_array(u32,   load, load_len)
 105                __field(size_t,        load_len      )
 106                __field(u32,           dynamic_power )
 107        ),
 108
 109        TP_fast_assign(
 110                __assign_bitmask(cpumask, cpumask_bits(cpus),
 111                                num_possible_cpus());
 112                __entry->freq = freq;
 113                memcpy(__get_dynamic_array(load), load,
 114                        load_len * sizeof(*load));
 115                __entry->load_len = load_len;
 116                __entry->dynamic_power = dynamic_power;
 117        ),
 118
 119        TP_printk("cpus=%s freq=%lu load={%s} dynamic_power=%d",
 120                __get_bitmask(cpumask), __entry->freq,
 121                __print_array(__get_dynamic_array(load), __entry->load_len, 4),
 122                __entry->dynamic_power)
 123);
 124
 125TRACE_EVENT(thermal_power_cpu_limit,
 126        TP_PROTO(const struct cpumask *cpus, unsigned int freq,
 127                unsigned long cdev_state, u32 power),
 128
 129        TP_ARGS(cpus, freq, cdev_state, power),
 130
 131        TP_STRUCT__entry(
 132                __bitmask(cpumask, num_possible_cpus())
 133                __field(unsigned int,  freq      )
 134                __field(unsigned long, cdev_state)
 135                __field(u32,           power     )
 136        ),
 137
 138        TP_fast_assign(
 139                __assign_bitmask(cpumask, cpumask_bits(cpus),
 140                                num_possible_cpus());
 141                __entry->freq = freq;
 142                __entry->cdev_state = cdev_state;
 143                __entry->power = power;
 144        ),
 145
 146        TP_printk("cpus=%s freq=%u cdev_state=%lu power=%u",
 147                __get_bitmask(cpumask), __entry->freq, __entry->cdev_state,
 148                __entry->power)
 149);
 150#endif /* CONFIG_CPU_THERMAL */
 151
 152#ifdef CONFIG_DEVFREQ_THERMAL
 153TRACE_EVENT(thermal_power_devfreq_get_power,
 154        TP_PROTO(struct thermal_cooling_device *cdev,
 155                 struct devfreq_dev_status *status, unsigned long freq,
 156                u32 power),
 157
 158        TP_ARGS(cdev, status,  freq, power),
 159
 160        TP_STRUCT__entry(
 161                __string(type,         cdev->type    )
 162                __field(unsigned long, freq          )
 163                __field(u32,           busy_time)
 164                __field(u32,           total_time)
 165                __field(u32,           power)
 166        ),
 167
 168        TP_fast_assign(
 169                __assign_str(type, cdev->type);
 170                __entry->freq = freq;
 171                __entry->busy_time = status->busy_time;
 172                __entry->total_time = status->total_time;
 173                __entry->power = power;
 174        ),
 175
 176        TP_printk("type=%s freq=%lu load=%u power=%u",
 177                __get_str(type), __entry->freq,
 178                __entry->total_time == 0 ? 0 :
 179                        (100 * __entry->busy_time) / __entry->total_time,
 180                __entry->power)
 181);
 182
 183TRACE_EVENT(thermal_power_devfreq_limit,
 184        TP_PROTO(struct thermal_cooling_device *cdev, unsigned long freq,
 185                unsigned long cdev_state, u32 power),
 186
 187        TP_ARGS(cdev, freq, cdev_state, power),
 188
 189        TP_STRUCT__entry(
 190                __string(type,         cdev->type)
 191                __field(unsigned int,  freq      )
 192                __field(unsigned long, cdev_state)
 193                __field(u32,           power     )
 194        ),
 195
 196        TP_fast_assign(
 197                __assign_str(type, cdev->type);
 198                __entry->freq = freq;
 199                __entry->cdev_state = cdev_state;
 200                __entry->power = power;
 201        ),
 202
 203        TP_printk("type=%s freq=%u cdev_state=%lu power=%u",
 204                __get_str(type), __entry->freq, __entry->cdev_state,
 205                __entry->power)
 206);
 207#endif /* CONFIG_DEVFREQ_THERMAL */
 208#endif /* _TRACE_THERMAL_H */
 209
 210/* This part must be outside protection */
 211#include <trace/define_trace.h>
 212