linux/tools/lib/traceevent/plugin_hrtimer.c
<<
>>
Prefs
   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
  27static int timer_expire_handler(struct trace_seq *s,
  28                                struct pevent_record *record,
  29                                struct event_format *event, void *context)
  30{
  31        trace_seq_printf(s, "hrtimer=");
  32
  33        if (pevent_print_num_field(s, "0x%llx", event, "timer",
  34                                   record, 0) == -1)
  35                pevent_print_num_field(s, "0x%llx", event, "hrtimer",
  36                                       record, 1);
  37
  38        trace_seq_printf(s, " now=");
  39
  40        pevent_print_num_field(s, "%llu", event, "now", record, 1);
  41
  42        pevent_print_func_field(s, " function=%s", event, "function",
  43                                record, 0);
  44        return 0;
  45}
  46
  47static int timer_start_handler(struct trace_seq *s,
  48                               struct pevent_record *record,
  49                               struct event_format *event, void *context)
  50{
  51        trace_seq_printf(s, "hrtimer=");
  52
  53        if (pevent_print_num_field(s, "0x%llx", event, "timer",
  54                                   record, 0) == -1)
  55                pevent_print_num_field(s, "0x%llx", event, "hrtimer",
  56                                       record, 1);
  57
  58        pevent_print_func_field(s, " function=%s", event, "function",
  59                                record, 0);
  60
  61        trace_seq_printf(s, " expires=");
  62        pevent_print_num_field(s, "%llu", event, "expires", record, 1);
  63
  64        trace_seq_printf(s, " softexpires=");
  65        pevent_print_num_field(s, "%llu", event, "softexpires", record, 1);
  66        return 0;
  67}
  68
  69int PEVENT_PLUGIN_LOADER(struct pevent *pevent)
  70{
  71        pevent_register_event_handler(pevent, -1,
  72                                      "timer", "hrtimer_expire_entry",
  73                                      timer_expire_handler, NULL);
  74
  75        pevent_register_event_handler(pevent, -1, "timer", "hrtimer_start",
  76                                      timer_start_handler, NULL);
  77        return 0;
  78}
  79
  80void PEVENT_PLUGIN_UNLOADER(struct pevent *pevent)
  81{
  82        pevent_unregister_event_handler(pevent, -1,
  83                                        "timer", "hrtimer_expire_entry",
  84                                        timer_expire_handler, NULL);
  85
  86        pevent_unregister_event_handler(pevent, -1, "timer", "hrtimer_start",
  87                                        timer_start_handler, NULL);
  88}
  89