at v5.1 2.7 kB view raw
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 28static 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 48static 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 70int TEP_PLUGIN_LOADER(struct tep_handle *pevent) 71{ 72 tep_register_event_handler(pevent, -1, 73 "timer", "hrtimer_expire_entry", 74 timer_expire_handler, NULL); 75 76 tep_register_event_handler(pevent, -1, "timer", "hrtimer_start", 77 timer_start_handler, NULL); 78 return 0; 79} 80 81void TEP_PLUGIN_UNLOADER(struct tep_handle *pevent) 82{ 83 tep_unregister_event_handler(pevent, -1, 84 "timer", "hrtimer_expire_entry", 85 timer_expire_handler, NULL); 86 87 tep_unregister_event_handler(pevent, -1, "timer", "hrtimer_start", 88 timer_start_handler, NULL); 89}