diff options
author | Punit Agrawal <punit.agrawal@arm.com> | 2014-07-29 06:50:50 -0400 |
---|---|---|
committer | Eduardo Valentin <edubezval@gmail.com> | 2014-07-29 09:28:43 -0400 |
commit | 208cd822a19e683bc890f6708786f2420e172d76 (patch) | |
tree | d4535734ba2e400b17eaabd365014c6b996ff9f1 | |
parent | 39811569e43a81417bc0ddca3d0c7658c3dcd4b0 (diff) |
thermal: trace: Trace when temperature is above a trip point
Create a new event to trace when the temperature is above a trip
point. Use the trace-point when handling non-critical and critical
trip pionts.
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
-rw-r--r-- | drivers/thermal/fair_share.c | 12 | ||||
-rw-r--r-- | drivers/thermal/step_wise.c | 5 | ||||
-rw-r--r-- | drivers/thermal/thermal_core.c | 2 | ||||
-rw-r--r-- | include/trace/events/thermal.h | 26 |
4 files changed, 44 insertions, 1 deletions
diff --git a/drivers/thermal/fair_share.c b/drivers/thermal/fair_share.c index 944ba2f340c8..6e0a3fbfae86 100644 --- a/drivers/thermal/fair_share.c +++ b/drivers/thermal/fair_share.c | |||
@@ -23,6 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/thermal.h> | 25 | #include <linux/thermal.h> |
26 | #include <trace/events/thermal.h> | ||
26 | 27 | ||
27 | #include "thermal_core.h" | 28 | #include "thermal_core.h" |
28 | 29 | ||
@@ -34,6 +35,7 @@ static int get_trip_level(struct thermal_zone_device *tz) | |||
34 | { | 35 | { |
35 | int count = 0; | 36 | int count = 0; |
36 | unsigned long trip_temp; | 37 | unsigned long trip_temp; |
38 | enum thermal_trip_type trip_type; | ||
37 | 39 | ||
38 | if (tz->trips == 0 || !tz->ops->get_trip_temp) | 40 | if (tz->trips == 0 || !tz->ops->get_trip_temp) |
39 | return 0; | 41 | return 0; |
@@ -43,6 +45,16 @@ static int get_trip_level(struct thermal_zone_device *tz) | |||
43 | if (tz->temperature < trip_temp) | 45 | if (tz->temperature < trip_temp) |
44 | break; | 46 | break; |
45 | } | 47 | } |
48 | |||
49 | /* | ||
50 | * count > 0 only if temperature is greater than first trip | ||
51 | * point, in which case, trip_point = count - 1 | ||
52 | */ | ||
53 | if (count > 0) { | ||
54 | tz->ops->get_trip_type(tz, count - 1, &trip_type); | ||
55 | trace_thermal_zone_trip(tz, count - 1, trip_type); | ||
56 | } | ||
57 | |||
46 | return count; | 58 | return count; |
47 | } | 59 | } |
48 | 60 | ||
diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c index f251521baaa2..3b54c2c226d8 100644 --- a/drivers/thermal/step_wise.c +++ b/drivers/thermal/step_wise.c | |||
@@ -23,6 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/thermal.h> | 25 | #include <linux/thermal.h> |
26 | #include <trace/events/thermal.h> | ||
26 | 27 | ||
27 | #include "thermal_core.h" | 28 | #include "thermal_core.h" |
28 | 29 | ||
@@ -129,8 +130,10 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) | |||
129 | 130 | ||
130 | trend = get_tz_trend(tz, trip); | 131 | trend = get_tz_trend(tz, trip); |
131 | 132 | ||
132 | if (tz->temperature >= trip_temp) | 133 | if (tz->temperature >= trip_temp) { |
133 | throttle = true; | 134 | throttle = true; |
135 | trace_thermal_zone_trip(tz, trip, trip_type); | ||
136 | } | ||
134 | 137 | ||
135 | dev_dbg(&tz->device, "Trip%d[type=%d,temp=%ld]:trend=%d,throttle=%d\n", | 138 | dev_dbg(&tz->device, "Trip%d[type=%d,temp=%ld]:trend=%d,throttle=%d\n", |
136 | trip, trip_type, trip_temp, trend, throttle); | 139 | trip, trip_type, trip_temp, trend, throttle); |
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index c74c78d28699..454884aa15f7 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c | |||
@@ -371,6 +371,8 @@ static void handle_critical_trips(struct thermal_zone_device *tz, | |||
371 | if (tz->temperature < trip_temp) | 371 | if (tz->temperature < trip_temp) |
372 | return; | 372 | return; |
373 | 373 | ||
374 | trace_thermal_zone_trip(tz, trip, trip_type); | ||
375 | |||
374 | if (tz->ops->notify) | 376 | if (tz->ops->notify) |
375 | tz->ops->notify(tz, trip, trip_type); | 377 | tz->ops->notify(tz, trip, trip_type); |
376 | 378 | ||
diff --git a/include/trace/events/thermal.h b/include/trace/events/thermal.h index 894a79ea0686..0f4f95d63c03 100644 --- a/include/trace/events/thermal.h +++ b/include/trace/events/thermal.h | |||
@@ -51,6 +51,32 @@ TRACE_EVENT(cdev_update, | |||
51 | TP_printk("type=%s target=%lu", __get_str(type), __entry->target) | 51 | TP_printk("type=%s target=%lu", __get_str(type), __entry->target) |
52 | ); | 52 | ); |
53 | 53 | ||
54 | TRACE_EVENT(thermal_zone_trip, | ||
55 | |||
56 | TP_PROTO(struct thermal_zone_device *tz, int trip, | ||
57 | enum thermal_trip_type trip_type), | ||
58 | |||
59 | TP_ARGS(tz, trip, trip_type), | ||
60 | |||
61 | TP_STRUCT__entry( | ||
62 | __string(thermal_zone, tz->type) | ||
63 | __field(int, id) | ||
64 | __field(int, trip) | ||
65 | __field(enum thermal_trip_type, trip_type) | ||
66 | ), | ||
67 | |||
68 | TP_fast_assign( | ||
69 | __assign_str(thermal_zone, tz->type); | ||
70 | __entry->id = tz->id; | ||
71 | __entry->trip = trip; | ||
72 | __entry->trip_type = trip_type; | ||
73 | ), | ||
74 | |||
75 | TP_printk("thermal_zone=%s id=%d trip=%d trip_type=%d", | ||
76 | __get_str(thermal_zone), __entry->id, __entry->trip, | ||
77 | __entry->trip_type) | ||
78 | ); | ||
79 | |||
54 | #endif /* _TRACE_THERMAL_H */ | 80 | #endif /* _TRACE_THERMAL_H */ |
55 | 81 | ||
56 | /* This part must be outside protection */ | 82 | /* This part must be outside protection */ |