lkml.org 
[lkml]   [2009]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] new irq tracer
    Date

    > Using Steve's new 'DEFINE_TRACE_FMT', I can get function graph trace
    > as follows using the original two tracepoints (patch below):
    >
    > 3) | handle_IRQ_event() {
    > 3) | /* (irq_handler_entry) irq=28 handler=eth0 */
    > 3) | e1000_intr_msi() {
    > 3) 2.460 us | __napi_schedule();
    > 3) 9.416 us | }
    > 3) | /* (irq_handler_exit) irq=28 handler=eth0 return=handled */
    > 3) + 22.935 us | }
    >
    > thanks,
    >
    > -Jason

    OK.
    I think you prove this patch is valuable enough. very thanks!

    Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>


    >
    >
    > Signed-off-by: Jason Baron <jbaron@redhat.com>
    > ---
    >
    > include/trace/irq.h | 9 +++++++++
    > include/trace/irq_event_types.h | 17 +++++++++++++++++
    > kernel/irq/handle.c | 6 ++++++
    > kernel/trace/events.c | 2 ++
    > 4 files changed, 34 insertions(+), 0 deletions(-)
    > create mode 100644 include/trace/irq.h
    > create mode 100644 include/trace/irq_event_types.h
    >
    >
    > diff --git a/include/trace/irq.h b/include/trace/irq.h
    > new file mode 100644
    > index 0000000..ff5d449
    > --- /dev/null
    > +++ b/include/trace/irq.h
    > @@ -0,0 +1,9 @@
    > +#ifndef _TRACE_IRQ_H
    > +#define _TRACE_IRQ_H
    > +
    > +#include <linux/interrupt.h>
    > +#include <linux/tracepoint.h>
    > +
    > +#include <trace/irq_event_types.h>
    > +
    > +#endif
    > diff --git a/include/trace/irq_event_types.h b/include/trace/irq_event_types.h
    > new file mode 100644
    > index 0000000..5889bfd
    > --- /dev/null
    > +++ b/include/trace/irq_event_types.h
    > @@ -0,0 +1,17 @@
    > +
    > +/* use <trace/irq.h> instead */
    > +#ifndef DEFINE_TRACE_FMT
    > +# error Do not include this file directly.
    > +# error Unless you know what you are doing.
    > +#endif
    > +
    > +DEFINE_TRACE_FMT(irq_handler_entry,
    > + TPPROTO(int irq, struct irqaction *action),
    > + TPARGS(irq, action),
    > + TPFMT("irq=%d handler=%s", irq, action->name));
    > +
    > +DEFINE_TRACE_FMT(irq_handler_exit,
    > + TPPROTO(int irq, struct irqaction *action, int ret),
    > + TPARGS(irq, action, ret),
    > + TPFMT("irq=%d handler=%s return=%s",
    > + irq, action->name, ret ? "handled" : "unhandled"));
    > diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
    > index fdff380..bcebc2e 100644
    > --- a/kernel/irq/handle.c
    > +++ b/kernel/irq/handle.c
    > @@ -18,6 +18,7 @@
    > #include <linux/rculist.h>
    > #include <linux/hash.h>
    > #include <linux/bootmem.h>
    > +#include <trace/irq.h>
    >
    > #include "internals.h"
    >
    > @@ -338,6 +339,9 @@ irqreturn_t no_action(int cpl, void *dev_id)
    > return IRQ_NONE;
    > }
    >
    > +DEFINE_TRACE(irq_handler_entry);
    > +DEFINE_TRACE(irq_handler_exit);
    > +
    > /**
    > * handle_IRQ_event - irq action chain handler
    > * @irq: the interrupt number
    > @@ -354,7 +358,9 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
    > local_irq_enable_in_hardirq();
    >
    > do {
    > + trace_irq_handler_entry(irq, action);
    > ret = action->handler(irq, action->dev_id);
    > + trace_irq_handler_exit(irq, action, ret);
    > if (ret == IRQ_HANDLED)
    > status |= action->flags;
    > retval |= ret;
    > diff --git a/kernel/trace/events.c b/kernel/trace/events.c
    > index 38c89ee..3c75623 100644
    > --- a/kernel/trace/events.c
    > +++ b/kernel/trace/events.c
    > @@ -6,8 +6,10 @@
    >
    > /* trace/<type>.h here */
    > #include <trace/sched.h>
    > +#include <trace/irq.h>
    >
    > #include "trace_events.h"
    >
    > /* trace/<type>_event_types.h here */
    > #include <trace/sched_event_types.h>
    > +#include <trace/irq_event_types.h>
    >
    >
    >
    >
    >
    >





    \
     
     \ /
      Last update: 2009-02-27 04:37    [W:0.121 / U:0.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site