LCOV - code coverage report
Current view: top level - include/trace/events - timer.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 13 15 86.7 %
Date: 2014-02-18 Functions: 0 40 0.0 %
Branches: 19 337 5.6 %

           Branch data     Line data    Source code
       1                 :            : #undef TRACE_SYSTEM
       2                 :            : #define TRACE_SYSTEM timer
       3                 :            : 
       4                 :            : #if !defined(_TRACE_TIMER_H) || defined(TRACE_HEADER_MULTI_READ)
       5                 :            : #define _TRACE_TIMER_H
       6                 :            : 
       7                 :            : #include <linux/tracepoint.h>
       8                 :            : #include <linux/hrtimer.h>
       9                 :            : #include <linux/timer.h>
      10                 :            : 
      11   [ #  #  #  # ]:          0 : DECLARE_EVENT_CLASS(timer_class,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
      12                 :            : 
      13                 :            :         TP_PROTO(struct timer_list *timer),
      14                 :            : 
      15                 :            :         TP_ARGS(timer),
      16                 :            : 
      17                 :            :         TP_STRUCT__entry(
      18                 :            :                 __field( void *,        timer   )
      19                 :            :         ),
      20                 :            : 
      21                 :            :         TP_fast_assign(
      22                 :            :                 __entry->timer       = timer;
      23                 :            :         ),
      24                 :            : 
      25                 :            :         TP_printk("timer=%p", __entry->timer)
      26                 :            : );
      27                 :            : 
      28                 :            : /**
      29                 :            :  * timer_init - called when the timer is initialized
      30                 :            :  * @timer:      pointer to struct timer_list
      31                 :            :  */
      32   [ -  +  #  # ]:    1005535 : DEFINE_EVENT(timer_class, timer_init,
                 [ #  # ]
      33                 :            : 
      34                 :            :         TP_PROTO(struct timer_list *timer),
      35                 :            : 
      36                 :            :         TP_ARGS(timer)
      37                 :            : );
      38                 :            : 
      39                 :            : /**
      40                 :            :  * timer_start - called when the timer is started
      41                 :            :  * @timer:      pointer to struct timer_list
      42                 :            :  * @expires:    the timers expiry time
      43                 :            :  */
      44   [ -  +  #  # ]:    2285525 : TRACE_EVENT(timer_start,
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ #  #  #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ #  #  #  # ]
                 [ #  # ]
           [ #  #  #  # ]
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
      45                 :            : 
      46                 :            :         TP_PROTO(struct timer_list *timer, unsigned long expires),
      47                 :            : 
      48                 :            :         TP_ARGS(timer, expires),
      49                 :            : 
      50                 :            :         TP_STRUCT__entry(
      51                 :            :                 __field( void *,        timer           )
      52                 :            :                 __field( void *,        function        )
      53                 :            :                 __field( unsigned long, expires         )
      54                 :            :                 __field( unsigned long, now             )
      55                 :            :         ),
      56                 :            : 
      57                 :            :         TP_fast_assign(
      58                 :            :                 __entry->timer               = timer;
      59                 :            :                 __entry->function    = timer->function;
      60                 :            :                 __entry->expires     = expires;
      61                 :            :                 __entry->now         = jiffies;
      62                 :            :         ),
      63                 :            : 
      64                 :            :         TP_printk("timer=%p function=%pf expires=%lu [timeout=%ld]",
      65                 :            :                   __entry->timer, __entry->function, __entry->expires,
      66                 :            :                   (long)__entry->expires - __entry->now)
      67                 :            : );
      68                 :            : 
      69                 :            : /**
      70                 :            :  * timer_expire_entry - called immediately before the timer callback
      71                 :            :  * @timer:      pointer to struct timer_list
      72                 :            :  *
      73                 :            :  * Allows to determine the timer latency.
      74                 :            :  */
      75   [ -  +  #  # ]:    1932900 : TRACE_EVENT(timer_expire_entry,
                 [ #  # ]
           [ #  #  #  # ]
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
      76                 :            : 
      77                 :            :         TP_PROTO(struct timer_list *timer),
      78                 :            : 
      79                 :            :         TP_ARGS(timer),
      80                 :            : 
      81                 :            :         TP_STRUCT__entry(
      82                 :            :                 __field( void *,        timer   )
      83                 :            :                 __field( unsigned long, now     )
      84                 :            :                 __field( void *,        function)
      85                 :            :         ),
      86                 :            : 
      87                 :            :         TP_fast_assign(
      88                 :            :                 __entry->timer               = timer;
      89                 :            :                 __entry->now         = jiffies;
      90                 :            :                 __entry->function    = timer->function;
      91                 :            :         ),
      92                 :            : 
      93                 :            :         TP_printk("timer=%p function=%pf now=%lu", __entry->timer, __entry->function,__entry->now)
      94                 :            : );
      95                 :            : 
      96                 :            : /**
      97                 :            :  * timer_expire_exit - called immediately after the timer callback returns
      98                 :            :  * @timer:      pointer to struct timer_list
      99                 :            :  *
     100                 :            :  * When used in combination with the timer_expire_entry tracepoint we can
     101                 :            :  * determine the runtime of the timer callback function.
     102                 :            :  *
     103                 :            :  * NOTE: Do NOT derefernce timer in TP_fast_assign. The pointer might
     104                 :            :  * be invalid. We solely track the pointer.
     105                 :            :  */
     106   [ -  +  #  # ]:    1933310 : DEFINE_EVENT(timer_class, timer_expire_exit,
                 [ #  # ]
     107                 :            : 
     108                 :            :         TP_PROTO(struct timer_list *timer),
     109                 :            : 
     110                 :            :         TP_ARGS(timer)
     111                 :            : );
     112                 :            : 
     113                 :            : /**
     114                 :            :  * timer_cancel - called when the timer is canceled
     115                 :            :  * @timer:      pointer to struct timer_list
     116                 :            :  */
     117   [ #  #  #  # ]:    2285085 : DEFINE_EVENT(timer_class, timer_cancel,
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
     118                 :            : 
     119                 :            :         TP_PROTO(struct timer_list *timer),
     120                 :            : 
     121                 :            :         TP_ARGS(timer)
     122                 :            : );
     123                 :            : 
     124                 :            : /**
     125                 :            :  * hrtimer_init - called when the hrtimer is initialized
     126                 :            :  * @hrtimer:    pointer to struct hrtimer
     127                 :            :  * @clockid:    the hrtimers clock
     128                 :            :  * @mode:       the hrtimers mode
     129                 :            :  */
     130   [ #  #  #  # ]:    1815768 : TRACE_EVENT(hrtimer_init,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
     131                 :            : 
     132                 :            :         TP_PROTO(struct hrtimer *hrtimer, clockid_t clockid,
     133                 :            :                  enum hrtimer_mode mode),
     134                 :            : 
     135                 :            :         TP_ARGS(hrtimer, clockid, mode),
     136                 :            : 
     137                 :            :         TP_STRUCT__entry(
     138                 :            :                 __field( void *,                hrtimer         )
     139                 :            :                 __field( clockid_t,             clockid         )
     140                 :            :                 __field( enum hrtimer_mode,     mode            )
     141                 :            :         ),
     142                 :            : 
     143                 :            :         TP_fast_assign(
     144                 :            :                 __entry->hrtimer     = hrtimer;
     145                 :            :                 __entry->clockid     = clockid;
     146                 :            :                 __entry->mode                = mode;
     147                 :            :         ),
     148                 :            : 
     149                 :            :         TP_printk("hrtimer=%p clockid=%s mode=%s", __entry->hrtimer,
     150                 :            :                   __entry->clockid == CLOCK_REALTIME ?
     151                 :            :                         "CLOCK_REALTIME" : "CLOCK_MONOTONIC",
     152                 :            :                   __entry->mode == HRTIMER_MODE_ABS ?
     153                 :            :                         "HRTIMER_MODE_ABS" : "HRTIMER_MODE_REL")
     154                 :            : );
     155                 :            : 
     156                 :            : /**
     157                 :            :  * hrtimer_start - called when the hrtimer is started
     158                 :            :  * @hrtimer: pointer to struct hrtimer
     159                 :            :  */
     160   [ #  #  #  # ]:   12688347 : TRACE_EVENT(hrtimer_start,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
     161                 :            : 
     162                 :            :         TP_PROTO(struct hrtimer *hrtimer),
     163                 :            : 
     164                 :            :         TP_ARGS(hrtimer),
     165                 :            : 
     166                 :            :         TP_STRUCT__entry(
     167                 :            :                 __field( void *,        hrtimer         )
     168                 :            :                 __field( void *,        function        )
     169                 :            :                 __field( s64,           expires         )
     170                 :            :                 __field( s64,           softexpires     )
     171                 :            :         ),
     172                 :            : 
     173                 :            :         TP_fast_assign(
     174                 :            :                 __entry->hrtimer     = hrtimer;
     175                 :            :                 __entry->function    = hrtimer->function;
     176                 :            :                 __entry->expires     = hrtimer_get_expires(hrtimer).tv64;
     177                 :            :                 __entry->softexpires = hrtimer_get_softexpires(hrtimer).tv64;
     178                 :            :         ),
     179                 :            : 
     180                 :            :         TP_printk("hrtimer=%p function=%pf expires=%llu softexpires=%llu",
     181                 :            :                   __entry->hrtimer, __entry->function,
     182                 :            :                   (unsigned long long)ktime_to_ns((ktime_t) {
     183                 :            :                                   .tv64 = __entry->expires }),
     184                 :            :                   (unsigned long long)ktime_to_ns((ktime_t) {
     185                 :            :                                   .tv64 = __entry->softexpires }))
     186                 :            : );
     187                 :            : 
     188                 :            : /**
     189                 :            :  * hrtimer_expire_entry - called immediately before the hrtimer callback
     190                 :            :  * @hrtimer:    pointer to struct hrtimer
     191                 :            :  * @now:        pointer to variable which contains current time of the
     192                 :            :  *              timers base.
     193                 :            :  *
     194                 :            :  * Allows to determine the timer latency.
     195                 :            :  */
     196   [ #  #  #  # ]:    8200271 : TRACE_EVENT(hrtimer_expire_entry,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
     197                 :            : 
     198                 :            :         TP_PROTO(struct hrtimer *hrtimer, ktime_t *now),
     199                 :            : 
     200                 :            :         TP_ARGS(hrtimer, now),
     201                 :            : 
     202                 :            :         TP_STRUCT__entry(
     203                 :            :                 __field( void *,        hrtimer )
     204                 :            :                 __field( s64,           now     )
     205                 :            :                 __field( void *,        function)
     206                 :            :         ),
     207                 :            : 
     208                 :            :         TP_fast_assign(
     209                 :            :                 __entry->hrtimer     = hrtimer;
     210                 :            :                 __entry->now         = now->tv64;
     211                 :            :                 __entry->function    = hrtimer->function;
     212                 :            :         ),
     213                 :            : 
     214                 :            :         TP_printk("hrtimer=%p function=%pf now=%llu", __entry->hrtimer, __entry->function,
     215                 :            :                   (unsigned long long)ktime_to_ns((ktime_t) { .tv64 = __entry->now }))
     216                 :            :  );
     217                 :            : 
     218   [ #  #  #  # ]:          0 : DECLARE_EVENT_CLASS(hrtimer_class,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     219                 :            : 
     220                 :            :         TP_PROTO(struct hrtimer *hrtimer),
     221                 :            : 
     222                 :            :         TP_ARGS(hrtimer),
     223                 :            : 
     224                 :            :         TP_STRUCT__entry(
     225                 :            :                 __field( void *,        hrtimer )
     226                 :            :         ),
     227                 :            : 
     228                 :            :         TP_fast_assign(
     229                 :            :                 __entry->hrtimer     = hrtimer;
     230                 :            :         ),
     231                 :            : 
     232                 :            :         TP_printk("hrtimer=%p", __entry->hrtimer)
     233                 :            : );
     234                 :            : 
     235                 :            : /**
     236                 :            :  * hrtimer_expire_exit - called immediately after the hrtimer callback returns
     237                 :            :  * @hrtimer:    pointer to struct hrtimer
     238                 :            :  *
     239                 :            :  * When used in combination with the hrtimer_expire_entry tracepoint we can
     240                 :            :  * determine the runtime of the callback function.
     241                 :            :  */
     242   [ -  +  #  # ]:    8220406 : DEFINE_EVENT(hrtimer_class, hrtimer_expire_exit,
                 [ #  # ]
     243                 :            : 
     244                 :            :         TP_PROTO(struct hrtimer *hrtimer),
     245                 :            : 
     246                 :            :         TP_ARGS(hrtimer)
     247                 :            : );
     248                 :            : 
     249                 :            : /**
     250                 :            :  * hrtimer_cancel - called when the hrtimer is canceled
     251                 :            :  * @hrtimer:    pointer to struct hrtimer
     252                 :            :  */
     253   [ #  #  #  # ]:   12687203 : DEFINE_EVENT(hrtimer_class, hrtimer_cancel,
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
     254                 :            : 
     255                 :            :         TP_PROTO(struct hrtimer *hrtimer),
     256                 :            : 
     257                 :            :         TP_ARGS(hrtimer)
     258                 :            : );
     259                 :            : 
     260                 :            : /**
     261                 :            :  * itimer_state - called when itimer is started or canceled
     262                 :            :  * @which:      name of the interval timer
     263                 :            :  * @value:      the itimers value, itimer is canceled if value->it_value is
     264                 :            :  *              zero, otherwise it is started
     265                 :            :  * @expires:    the itimers expiry time
     266                 :            :  */
     267   [ #  #  #  # ]:       5198 : TRACE_EVENT(itimer_state,
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
           [ -  +  #  # ]
                 [ #  # ]
           [ -  +  #  # ]
     268                 :            : 
     269                 :            :         TP_PROTO(int which, const struct itimerval *const value,
     270                 :            :                  cputime_t expires),
     271                 :            : 
     272                 :            :         TP_ARGS(which, value, expires),
     273                 :            : 
     274                 :            :         TP_STRUCT__entry(
     275                 :            :                 __field(        int,            which           )
     276                 :            :                 __field(        cputime_t,      expires         )
     277                 :            :                 __field(        long,           value_sec       )
     278                 :            :                 __field(        long,           value_usec      )
     279                 :            :                 __field(        long,           interval_sec    )
     280                 :            :                 __field(        long,           interval_usec   )
     281                 :            :         ),
     282                 :            : 
     283                 :            :         TP_fast_assign(
     284                 :            :                 __entry->which               = which;
     285                 :            :                 __entry->expires     = expires;
     286                 :            :                 __entry->value_sec   = value->it_value.tv_sec;
     287                 :            :                 __entry->value_usec  = value->it_value.tv_usec;
     288                 :            :                 __entry->interval_sec        = value->it_interval.tv_sec;
     289                 :            :                 __entry->interval_usec       = value->it_interval.tv_usec;
     290                 :            :         ),
     291                 :            : 
     292                 :            :         TP_printk("which=%d expires=%llu it_value=%ld.%ld it_interval=%ld.%ld",
     293                 :            :                   __entry->which, (unsigned long long)__entry->expires,
     294                 :            :                   __entry->value_sec, __entry->value_usec,
     295                 :            :                   __entry->interval_sec, __entry->interval_usec)
     296                 :            : );
     297                 :            : 
     298                 :            : /**
     299                 :            :  * itimer_expire - called when itimer expires
     300                 :            :  * @which:      type of the interval timer
     301                 :            :  * @pid:        pid of the process which owns the timer
     302                 :            :  * @now:        current time, used to calculate the latency of itimer
     303                 :            :  */
     304      [ -  #  # ]:       2018 : TRACE_EVENT(itimer_expire,
                 [ #  # ]
           [ #  #  #  # ]
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
           [ -  +  #  # ]
     305                 :            : 
     306                 :            :         TP_PROTO(int which, struct pid *pid, cputime_t now),
     307                 :            : 
     308                 :            :         TP_ARGS(which, pid, now),
     309                 :            : 
     310                 :            :         TP_STRUCT__entry(
     311                 :            :                 __field( int ,          which   )
     312                 :            :                 __field( pid_t,         pid     )
     313                 :            :                 __field( cputime_t,     now     )
     314                 :            :         ),
     315                 :            : 
     316                 :            :         TP_fast_assign(
     317                 :            :                 __entry->which       = which;
     318                 :            :                 __entry->now = now;
     319                 :            :                 __entry->pid = pid_nr(pid);
     320                 :            :         ),
     321                 :            : 
     322                 :            :         TP_printk("which=%d pid=%d now=%llu", __entry->which,
     323                 :            :                   (int) __entry->pid, (unsigned long long)__entry->now)
     324                 :            : );
     325                 :            : 
     326                 :            : #ifdef CONFIG_NO_HZ_COMMON
     327   [ -  +  #  # ]:    1989962 : TRACE_EVENT(tick_stop,
         [ #  # ][ #  # ]
                 [ #  # ]
           [ #  #  #  # ]
                 [ #  # ]
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     328                 :            : 
     329                 :            :         TP_PROTO(int success, char *error_msg),
     330                 :            : 
     331                 :            :         TP_ARGS(success, error_msg),
     332                 :            : 
     333                 :            :         TP_STRUCT__entry(
     334                 :            :                 __field( int ,          success )
     335                 :            :                 __string( msg,          error_msg )
     336                 :            :         ),
     337                 :            : 
     338                 :            :         TP_fast_assign(
     339                 :            :                 __entry->success     = success;
     340                 :            :                 __assign_str(msg, error_msg);
     341                 :            :         ),
     342                 :            : 
     343                 :            :         TP_printk("success=%s msg=%s",  __entry->success ? "yes" : "no", __get_str(msg))
     344                 :            : );
     345                 :            : #endif
     346                 :            : 
     347                 :            : #endif /*  _TRACE_TIMER_H */
     348                 :            : 
     349                 :            : /* This part must be outside protection */
     350                 :            : #include <trace/define_trace.h>

Generated by: LCOV version 1.9