lkml.org 
[lkml]   [2009]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 06/11] tracing: update sample code with new tag format
    From: Steven Rostedt <srostedt@redhat.com>

    This patch adds examples of all the new tags in the
    samples/trace_events/ example code.

    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    samples/trace_events/trace-events-sample.c | 21 ++++++++-
    samples/trace_events/trace-events-sample.h | 66 ++++++++++++++++++++++++++++
    2 files changed, 85 insertions(+), 2 deletions(-)

    diff --git a/samples/trace_events/trace-events-sample.c b/samples/trace_events/trace-events-sample.c
    index aabc4e9..dea8eb3 100644
    --- a/samples/trace_events/trace-events-sample.c
    +++ b/samples/trace_events/trace-events-sample.c
    @@ -10,12 +10,31 @@
    #define CREATE_TRACE_POINTS
    #include "trace-events-sample.h"

    +static struct task_struct *simple_tsk;

    static void simple_thread_func(int cnt)
    {
    + static int mask;
    + static int myif;
    +
    set_current_state(TASK_INTERRUPTIBLE);
    schedule_timeout(HZ);
    trace_foo_bar("hello", cnt);
    + trace_format_examples(jiffies,
    + jiffies * 2,
    + "a string here",
    + &simple_tsk,
    + mask, mask, simple_thread_func,
    + myif, myif, cpu_clock(raw_smp_processor_id()),
    + 123456);
    + if (!myif)
    + myif = 3;
    +
    + if (!mask)
    + mask = 5;
    +
    + mask <<= mask;
    + myif <<= myif;
    }

    static int simple_thread(void *arg)
    @@ -28,8 +47,6 @@ static int simple_thread(void *arg)
    return 0;
    }

    -static struct task_struct *simple_tsk;
    -
    static int __init trace_event_init(void)
    {
    simple_tsk = kthread_run(simple_thread, NULL, "event-sample");
    diff --git a/samples/trace_events/trace-events-sample.h b/samples/trace_events/trace-events-sample.h
    index 128a897..08b4768 100644
    --- a/samples/trace_events/trace-events-sample.h
    +++ b/samples/trace_events/trace-events-sample.h
    @@ -65,6 +65,11 @@
    * Note, that for both the assign and the printk, __entry is the handler
    * to the data structure in the ring buffer, and is defined by the
    * TP_STRUCT__entry.
    + *
    + * Note it is better to now use the tag format. Examples are in the event
    + * below, and the explanation of the tag format language is in:
    + *
    + * kernel/trace/trace_read_binary.h
    */
    TRACE_EVENT(foo_bar,

    @@ -84,6 +89,67 @@ TRACE_EVENT(foo_bar,

    TP_printk("foo %s %d", __entry->foo, __entry->bar)
    );
    +
    +/*
    + * These are a few examples of the tag format to do the output.
    + */
    +TRACE_EVENT(format_examples,
    +
    + TP_PROTO(int myint, long mylong, char *mystr, void *myptr,
    + unsigned long mask, unsigned sym, void *func,
    + int myif, int myifmask, unsigned long long nsec,
    + int dev),
    +
    + TP_ARGS(myint, mylong, mystr, myptr, mask, sym, func,
    + myif, myifmask, nsec, dev),
    +
    + TP_STRUCT__entry(
    + __field( int, myint )
    + __field( long, mylong )
    + __string(str, mystr)
    + __array( char, str_arr, 20 )
    + __field( void *, func )
    + __field( int, myif )
    + __field( unsigned long, mask )
    + __field( unsigned long, sym )
    + __field( int, myifmask )
    + __field( int, dev )
    + __field( unsigned long long, nsec )
    + ),
    +
    + TP_fast_assign(
    + __entry->myint = myint;
    + __entry->mylong = mylong;
    + __assign_str(str, mystr);
    + strncpy(__entry->str_arr, mystr, 19);
    + __entry->str_arr[19] = 0;
    + __entry->mask = mask;
    + __entry->sym = sym;
    + __entry->func = func;
    + __entry->myif = myif;
    + __entry->myifmask = myifmask;
    + __entry->dev = dev;
    + __entry->nsec = nsec;
    + ),
    +
    + TP_FORMAT("to see a normal int <int:myint> \n"
    + "or perhaps make it unsigned <uint:myint>\n"
    + "no difference for the size <int:mylong>\n"
    + "lets make it into a hex <hex:myint>\n"
    + "dynamic strings are simple <string:str>\n"
    + "and so are static ones <strarray:str_arr>\n"
    + "see a func and offset <symfunc:func>\n"
    + "or just the func name <func:func>\n"
    + "should we print <if:myif:this:that>\n"
    + "or base it on a bit mask <ifmask:myif:0xc:foo:bar>\n"
    + "we want to see that device <major:dev>,<minor:dev>\n"
    + "we can see masks <mask:mask:,:0=nothing,0xa=a,1=one,2=two>\n"
    + "or values of symbols <sym:sym:1=this,2=that,3=nevermind>\n"
    + "and know what time it is in seconds <nsec2sec:6:nsec> \n"
    + "millisecs <nsec2msec:6:nsec>\n"
    + "or microsecs <nsec2usec:3:nsec>")
    +);
    +
    #endif

    /***** NOTICE! The #if protection ends here. *****/
    --
    1.6.3.1
    --


    \
     
     \ /
      Last update: 2009-06-10 19:05    [W:0.027 / U:180.848 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site