root/tools/lib/traceevent/plugins/plugin_hrtimer.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. timer_expire_handler
  2. timer_start_handler
  3. TEP_PLUGIN_LOADER
  4. TEP_PLUGIN_UNLOADER

   1 /*
   2  * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
   3  * Copyright (C) 2009 Johannes Berg <johannes@sipsolutions.net>
   4  *
   5  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   6  * This program is free software; you can redistribute it and/or
   7  * modify it under the terms of the GNU Lesser General Public
   8  * License as published by the Free Software Foundation;
   9  * version 2.1 of the License (not later!)
  10  *
  11  * This program is distributed in the hope that it will be useful,
  12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14  * GNU Lesser General Public License for more details.
  15  *
  16  * You should have received a copy of the GNU Lesser General Public
  17  * License along with this program; if not,  see <http://www.gnu.org/licenses>
  18  *
  19  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  20  */
  21 #include <stdio.h>
  22 #include <stdlib.h>
  23 #include <string.h>
  24 
  25 #include "event-parse.h"
  26 #include "trace-seq.h"
  27 
  28 static int timer_expire_handler(struct trace_seq *s,
  29                                 struct tep_record *record,
  30                                 struct tep_event *event, void *context)
  31 {
  32         trace_seq_printf(s, "hrtimer=");
  33 
  34         if (tep_print_num_field(s, "0x%llx", event, "timer",
  35                                 record, 0) == -1)
  36                 tep_print_num_field(s, "0x%llx", event, "hrtimer",
  37                                     record, 1);
  38 
  39         trace_seq_printf(s, " now=");
  40 
  41         tep_print_num_field(s, "%llu", event, "now", record, 1);
  42 
  43         tep_print_func_field(s, " function=%s", event, "function",
  44                                 record, 0);
  45         return 0;
  46 }
  47 
  48 static int timer_start_handler(struct trace_seq *s,
  49                                struct tep_record *record,
  50                                struct tep_event *event, void *context)
  51 {
  52         trace_seq_printf(s, "hrtimer=");
  53 
  54         if (tep_print_num_field(s, "0x%llx", event, "timer",
  55                                 record, 0) == -1)
  56                 tep_print_num_field(s, "0x%llx", event, "hrtimer",
  57                                     record, 1);
  58 
  59         tep_print_func_field(s, " function=%s", event, "function",
  60                              record, 0);
  61 
  62         trace_seq_printf(s, " expires=");
  63         tep_print_num_field(s, "%llu", event, "expires", record, 1);
  64 
  65         trace_seq_printf(s, " softexpires=");
  66         tep_print_num_field(s, "%llu", event, "softexpires", record, 1);
  67         return 0;
  68 }
  69 
  70 int TEP_PLUGIN_LOADER(struct tep_handle *tep)
  71 {
  72         tep_register_event_handler(tep, -1,
  73                                    "timer", "hrtimer_expire_entry",
  74                                    timer_expire_handler, NULL);
  75 
  76         tep_register_event_handler(tep, -1, "timer", "hrtimer_start",
  77                                    timer_start_handler, NULL);
  78         return 0;
  79 }
  80 
  81 void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
  82 {
  83         tep_unregister_event_handler(tep, -1,
  84                                      "timer", "hrtimer_expire_entry",
  85                                      timer_expire_handler, NULL);
  86 
  87         tep_unregister_event_handler(tep, -1, "timer", "hrtimer_start",
  88                                      timer_start_handler, NULL);
  89 }

/* [<][>][^][v][top][bottom][index][help] */