lkml.org 
[lkml]   [2013]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/24] tools list traceevent: Add hrtimer plugin
    Date
    Backporting hrtimer plugin.

    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: David Ahern <dsahern@gmail.com>
    ---
    tools/lib/traceevent/Makefile | 2 +-
    tools/lib/traceevent/plugin_hrtimer.c | 94 +++++++++++++++++++++++++++++++++++
    2 files changed, 95 insertions(+), 1 deletion(-)
    create mode 100644 tools/lib/traceevent/plugin_hrtimer.c

    diff --git a/tools/lib/traceevent/Makefile b/tools/lib/traceevent/Makefile
    index 178cfa1..6e29f26 100644
    --- a/tools/lib/traceevent/Makefile
    +++ b/tools/lib/traceevent/Makefile
    @@ -208,7 +208,7 @@ $(obj)/%.o: $(src)/%.c
    PEVENT_LIB_OBJS = event-parse.o event-plugin.o trace-seq.o parse-filter.o parse-utils.o event-option.o
    PEVENT_LIB_OBJS += kbuffer-parse.o

    -PLUGIN_OBJS = plugin_jbd2.o plugin_blk.o
    +PLUGIN_OBJS = plugin_jbd2.o plugin_blk.o plugin_hrtimer.o

    PLUGINS := $(PLUGIN_OBJS:.o=.so)

    diff --git a/tools/lib/traceevent/plugin_hrtimer.c b/tools/lib/traceevent/plugin_hrtimer.c
    new file mode 100644
    index 0000000..e7fb195
    --- /dev/null
    +++ b/tools/lib/traceevent/plugin_hrtimer.c
    @@ -0,0 +1,94 @@
    +/*
    + * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
    + * Copyright (C) 2009 Johannes Berg <johannes@sipsolutions.net>
    + *
    + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + * This program is free software; you can redistribute it and/or
    + * modify it under the terms of the GNU Lesser General Public
    + * License as published by the Free Software Foundation;
    + * version 2.1 of the License (not later!)
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    + * GNU Lesser General Public License for more details.
    + *
    + * You should have received a copy of the GNU Lesser General Public
    + * License along with this program; if not, see <http://www.gnu.org/licenses>
    + *
    + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + */
    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <string.h>
    +
    +#include "event-parse.h"
    +
    +static int timer_expire_handler(struct trace_seq *s,
    + struct pevent_record *record,
    + struct event_format *event, void *context)
    +{
    + trace_seq_printf(s, "hrtimer=");
    +
    + if (pevent_print_num_field(s, "0x%llx", event, "timer",
    + record, 0) == -1)
    + pevent_print_num_field(s, "0x%llx", event, "hrtimer",
    + record, 1);
    +
    + trace_seq_printf(s, " now=");
    +
    + pevent_print_num_field(s, "%llu", event, "now", record, 1);
    +
    + pevent_print_func_field(s, " function=%s", event, "function",
    + record, 0);
    +
    + return 0;
    +}
    +
    +static int timer_start_handler(struct trace_seq *s, struct pevent_record *record,
    + struct event_format *event, void *context)
    +{
    + struct pevent *pevent = event->pevent;
    + struct format_field *fn = pevent_find_field(event, "function");
    + void *data = record->data;
    +
    + trace_seq_printf(s, "hrtimer=");
    +
    + if (pevent_print_num_field(s, "0x%llx", event, "timer",
    + record, 0) == -1)
    + pevent_print_num_field(s, "0x%llx", event, "hrtimer",
    + record, 1);
    +
    + if (!fn) {
    + trace_seq_printf(s, " function=MISSING");
    + } else {
    + unsigned long long function;
    + const char *func;
    +
    + if (pevent_read_number_field(fn, data, &function))
    + trace_seq_printf(s, " function=INVALID");
    +
    + func = pevent_find_function(pevent, function);
    +
    + trace_seq_printf(s, " function=%s", func);
    + }
    +
    + trace_seq_printf(s, " expires=");
    + pevent_print_num_field(s, "%llu", event, "expires", record, 1);
    +
    + trace_seq_printf(s, " softexpires=");
    + pevent_print_num_field(s, "%llu", event, "softexpires", record, 1);
    +
    + return 0;
    +}
    +
    +int PEVENT_PLUGIN_LOADER(struct pevent *pevent)
    +{
    + pevent_register_event_handler(pevent, -1, "timer", "hrtimer_expire_entry",
    + timer_expire_handler, NULL);
    +
    + pevent_register_event_handler(pevent, -1, "timer", "hrtimer_start",
    + timer_start_handler, NULL);
    +
    + return 0;
    +}
    --
    1.7.11.7


    \
     
     \ /
      Last update: 2013-09-01 13:21    [W:4.724 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site