| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 
|---|
| 2 | #undef TRACE_SYSTEM | 
|---|
| 3 | #define TRACE_SYSTEM alarmtimer | 
|---|
| 4 |  | 
|---|
| 5 | #if !defined(_TRACE_ALARMTIMER_H) || defined(TRACE_HEADER_MULTI_READ) | 
|---|
| 6 | #define _TRACE_ALARMTIMER_H | 
|---|
| 7 |  | 
|---|
| 8 | #include <linux/alarmtimer.h> | 
|---|
| 9 | #include <linux/rtc.h> | 
|---|
| 10 | #include <linux/tracepoint.h> | 
|---|
| 11 |  | 
|---|
| 12 | TRACE_DEFINE_ENUM(ALARM_REALTIME); | 
|---|
| 13 | TRACE_DEFINE_ENUM(ALARM_BOOTTIME); | 
|---|
| 14 | TRACE_DEFINE_ENUM(ALARM_REALTIME_FREEZER); | 
|---|
| 15 | TRACE_DEFINE_ENUM(ALARM_BOOTTIME_FREEZER); | 
|---|
| 16 |  | 
|---|
| 17 | #define show_alarm_type(type)	__print_flags(type, " | ",	\ | 
|---|
| 18 | { 1 << ALARM_REALTIME, "REALTIME" },			\ | 
|---|
| 19 | { 1 << ALARM_BOOTTIME, "BOOTTIME" },			\ | 
|---|
| 20 | { 1 << ALARM_REALTIME_FREEZER, "REALTIME Freezer" },	\ | 
|---|
| 21 | { 1 << ALARM_BOOTTIME_FREEZER, "BOOTTIME Freezer" }) | 
|---|
| 22 |  | 
|---|
| 23 | #ifdef CONFIG_RTC_CLASS | 
|---|
| 24 | TRACE_EVENT(alarmtimer_suspend, | 
|---|
| 25 |  | 
|---|
| 26 | TP_PROTO(ktime_t expires, int flag), | 
|---|
| 27 |  | 
|---|
| 28 | TP_ARGS(expires, flag), | 
|---|
| 29 |  | 
|---|
| 30 | TP_STRUCT__entry( | 
|---|
| 31 | __field(s64, expires) | 
|---|
| 32 | __field(unsigned char, alarm_type) | 
|---|
| 33 | ), | 
|---|
| 34 |  | 
|---|
| 35 | TP_fast_assign( | 
|---|
| 36 | __entry->expires = expires; | 
|---|
| 37 | __entry->alarm_type = flag; | 
|---|
| 38 | ), | 
|---|
| 39 |  | 
|---|
| 40 | TP_printk( "alarmtimer type:%s expires:%llu", | 
|---|
| 41 | show_alarm_type((1 << __entry->alarm_type)), | 
|---|
| 42 | __entry->expires | 
|---|
| 43 | ) | 
|---|
| 44 | ); | 
|---|
| 45 | #endif /* CONFIG_RTC_CLASS */ | 
|---|
| 46 |  | 
|---|
| 47 | DECLARE_EVENT_CLASS(alarm_class, | 
|---|
| 48 |  | 
|---|
| 49 | TP_PROTO(struct alarm *alarm, ktime_t now), | 
|---|
| 50 |  | 
|---|
| 51 | TP_ARGS(alarm, now), | 
|---|
| 52 |  | 
|---|
| 53 | TP_STRUCT__entry( | 
|---|
| 54 | __field(void *,	alarm) | 
|---|
| 55 | __field(unsigned char, alarm_type) | 
|---|
| 56 | __field(s64, expires) | 
|---|
| 57 | __field(s64, now) | 
|---|
| 58 | ), | 
|---|
| 59 |  | 
|---|
| 60 | TP_fast_assign( | 
|---|
| 61 | __entry->alarm = alarm; | 
|---|
| 62 | __entry->alarm_type = alarm->type; | 
|---|
| 63 | __entry->expires = alarm->node.expires; | 
|---|
| 64 | __entry->now = now; | 
|---|
| 65 | ), | 
|---|
| 66 |  | 
|---|
| 67 | TP_printk( "alarmtimer:%p type:%s expires:%llu now:%llu", | 
|---|
| 68 | __entry->alarm, | 
|---|
| 69 | show_alarm_type((1 << __entry->alarm_type)), | 
|---|
| 70 | __entry->expires, | 
|---|
| 71 | __entry->now | 
|---|
| 72 | ) | 
|---|
| 73 | ); | 
|---|
| 74 |  | 
|---|
| 75 | DEFINE_EVENT(alarm_class, alarmtimer_fired, | 
|---|
| 76 |  | 
|---|
| 77 | TP_PROTO(struct alarm *alarm, ktime_t now), | 
|---|
| 78 |  | 
|---|
| 79 | TP_ARGS(alarm, now) | 
|---|
| 80 | ); | 
|---|
| 81 |  | 
|---|
| 82 | DEFINE_EVENT(alarm_class, alarmtimer_start, | 
|---|
| 83 |  | 
|---|
| 84 | TP_PROTO(struct alarm *alarm, ktime_t now), | 
|---|
| 85 |  | 
|---|
| 86 | TP_ARGS(alarm, now) | 
|---|
| 87 | ); | 
|---|
| 88 |  | 
|---|
| 89 | DEFINE_EVENT(alarm_class, alarmtimer_cancel, | 
|---|
| 90 |  | 
|---|
| 91 | TP_PROTO(struct alarm *alarm, ktime_t now), | 
|---|
| 92 |  | 
|---|
| 93 | TP_ARGS(alarm, now) | 
|---|
| 94 | ); | 
|---|
| 95 |  | 
|---|
| 96 | #endif /* _TRACE_ALARMTIMER_H */ | 
|---|
| 97 |  | 
|---|
| 98 | /* This part must be outside protection */ | 
|---|
| 99 | #include <trace/define_trace.h> | 
|---|
| 100 |  | 
|---|