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