lkml.org 
[lkml]   [2009]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Patch 2/2] tracepoints for softirq entry/exit - tracepoints

    On Mon, 16 Mar 2009, Jason Baron wrote:

    > hi,
    >
    > ok, below is a re-spun patch 2/2 which converts to the TRACE_EVENT
    > format.

    Thanks, some comments though.

    >
    > thanks,
    >
    > -Jason
    >
    >
    > Signed-off-by: Jason Baron <jbaron@redhat.com>
    >
    > ---
    >
    > include/trace/irq_event_types.h | 36 ++++++++++++++++++++++++++++++++++++
    > kernel/softirq.c | 7 ++++++-
    > 2 files changed, 42 insertions(+), 1 deletions(-)
    >
    >
    > diff --git a/include/trace/irq_event_types.h b/include/trace/irq_event_types.h
    > index 214bb92..de1f2a9 100644
    > --- a/include/trace/irq_event_types.h
    > +++ b/include/trace/irq_event_types.h
    > @@ -40,4 +40,40 @@ TRACE_EVENT(irq_handler_exit,
    > __entry->irq, __entry->ret ? "handled" : "unhandled")
    > );
    >
    > +TRACE_EVENT(softirq_action_entry,
    > +
    > + TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
    > +
    > + TP_ARGS(h, vec),
    > +
    > + TP_STRUCT__entry(
    > + __array( char, softirq_name, MAX_SOFTIRQ_NAME_LEN )
    > + ),
    > +
    > + TP_fast_assign(
    > + memcpy(__entry->softirq_name, softirq_to_name[h-vec],
    > + MAX_SOFTIRQ_NAME_LEN);

    memcpy isn't fast ;-)

    What you want is this:

    TP_STRUCT__entry(
    __field( int, vec )
    ),

    TP_fast_assign(
    __entry->vec = h - vec;
    > + ),
    > +
    > + TP_printk("softirq entry: %s", __entry->softirq_name)

    TP_printk("softirq entry: %s", softirq_to_name[__entry->vec])

    > +);
    > +
    > +TRACE_EVENT(softirq_action_exit,
    > +
    > + TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
    > +
    > + TP_ARGS(h, vec),
    > +
    > + TP_STRUCT__entry(
    > + __array( char, softirq_name, MAX_SOFTIRQ_NAME_LEN )
    > + ),
    > +
    > + TP_fast_assign(
    > + memcpy(__entry->softirq_name, softirq_to_name[h-vec],
    > + MAX_SOFTIRQ_NAME_LEN);
    > + ),
    > +
    > + TP_printk("softirq exit: %s", __entry->softirq_name)


    And do the same here.

    -- Steve

    > +);
    > +
    > #undef TRACE_SYSTEM
    > diff --git a/kernel/softirq.c b/kernel/softirq.c
    > index 8f3ae57..5e96c77 100644
    > --- a/kernel/softirq.c
    > +++ b/kernel/softirq.c
    > @@ -24,6 +24,7 @@
    > #include <linux/ftrace.h>
    > #include <linux/smp.h>
    > #include <linux/tick.h>
    > +#include <trace/irq.h>
    >
    > #include <asm/irq.h>
    > /*
    > @@ -185,6 +186,9 @@ EXPORT_SYMBOL(local_bh_enable_ip);
    > */
    > #define MAX_SOFTIRQ_RESTART 10
    >
    > +DEFINE_TRACE(softirq_action_entry);
    > +DEFINE_TRACE(softirq_action_exit);
    > +
    > asmlinkage void __do_softirq(void)
    > {
    > struct softirq_action *h;
    > @@ -211,8 +215,9 @@ restart:
    > if (pending & 1) {
    > int prev_count = preempt_count();
    >
    > + trace_softirq_action_entry(h, softirq_vec);
    > h->action(h);
    > -
    > + trace_softirq_action_exit(h, softirq_vec);
    > if (unlikely(prev_count != preempt_count())) {
    > printk(KERN_ERR "huh, entered softirq %td %s %p"
    > "with preempt_count %08x,"
    >


    \
     
     \ /
      Last update: 2009-03-16 20:19    [W:2.367 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site