lkml.org 
[lkml]   [2010]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH v2 1/5] irq: add tracepoint to softirq_raise
    Hi Steven,

    Sorry, I submitted other patches to only netdev.
    I'll resubmit soon all patches to linux-kernel.

    (2010/06/25 4:15), Steven Rostedt wrote:
    > Hi Koki,
    >
    > Your subject says 1/5 but I do not see any other patches.
    >
    >
    > On Thu, 2010-06-24 at 17:16 +0900, Koki Sanagi wrote:
    >> This patch adds a tracepoint to raising of softirq.
    >> This is useful if you want to detect which hard interrupt raise softirq
    >> and lets you know a time between raising softirq and performing softirq.
    >> Combinating with other tracepoint, it lets us know a process of packets
    >> (See patch 0/5).
    >>
    >> <idle>-0 [001] 241229.957184: softirq_raise: vec=3 [action=NET_RX]
    >> <idle>-0 [000] 241229.993399: softirq_raise: vec=1 [action=TIMER]
    >> <idle>-0 [000] 241229.993400: softirq_raise: vec=9 [action=RCU]
    >>
    >> This is a same patch Lai Jiangshan submitted.
    >> http://marc.info/?l=linux-kernel&m=126026122728732&w=2
    >>
    >> Signed-off-by: Koki Sanagi <sanagi.koki@jp.fujitsu.com>
    >> ---
    >> include/linux/interrupt.h | 8 +++++++-
    >> include/trace/events/irq.h | 34 +++++++++++++++++++++++++++++++---
    >> 2 files changed, 38 insertions(+), 4 deletions(-)
    >>
    >> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
    >> index c233113..1cb5726 100644
    >> --- a/include/linux/interrupt.h
    >> +++ b/include/linux/interrupt.h
    >> @@ -18,6 +18,7 @@
    >> #include <asm/atomic.h>
    >> #include <asm/ptrace.h>
    >> #include <asm/system.h>
    >> +#include <trace/events/irq.h>
    >>
    >> /*
    >> * These correspond to the IORESOURCE_IRQ_* defines in
    >> @@ -402,7 +403,12 @@ asmlinkage void do_softirq(void);
    >> asmlinkage void __do_softirq(void);
    >> extern void open_softirq(int nr, void (*action)(struct softirq_action *));
    >> extern void softirq_init(void);
    >> -#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
    >> +static inline void __raise_softirq_irqoff(unsigned int nr)
    >> +{
    >> + trace_softirq_raise(nr);
    >> + or_softirq_pending(1UL << nr);
    >> +}
    >> +
    >> extern void raise_softirq_irqoff(unsigned int nr);
    >> extern void raise_softirq(unsigned int nr);
    >> extern void wakeup_softirqd(void);
    >> diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h
    >> index 0e4cfb6..7cb7435 100644
    >> --- a/include/trace/events/irq.h
    >> +++ b/include/trace/events/irq.h
    >> @@ -5,7 +5,9 @@
    >> #define _TRACE_IRQ_H
    >>
    >> #include <linux/tracepoint.h>
    >> -#include <linux/interrupt.h>
    >> +
    >> +struct irqaction;
    >> +struct softirq_action;
    >>
    >> #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq }
    >> #define show_softirq_name(val) \
    >> @@ -82,6 +84,32 @@ TRACE_EVENT(irq_handler_exit,
    >> __entry->irq, __entry->ret ? "handled" : "unhandled")
    >> );
    >>
    >> +/**
    >> + * softirq_raise - called immediately when a softirq is raised
    >> + * @nr: softirq vector number
    >> + *
    >> + * Tracepoint for tracing when softirq action is raised.
    >> + * Also, when used in combination with the softirq_entry tracepoint
    >> + * we can determine the softirq raise latency.
    >> + */
    >> +TRACE_EVENT(softirq_raise,
    >> +
    >> + TP_PROTO(unsigned int nr),
    >> +
    >> + TP_ARGS(nr),
    >> +
    >> + TP_STRUCT__entry(
    >> + __field( unsigned int, vec )
    >> + ),
    >> +
    >> + TP_fast_assign(
    >> + __entry->vec = nr;
    >> + ),
    >> +
    >> + TP_printk("vec=%d [action=%s]", __entry->vec,
    >> + show_softirq_name(__entry->vec))
    >
    > Hmm, is there a way to reuse a DECLARE_EVENT_CLASS here?
    >
    >> +);
    >> +
    >> DECLARE_EVENT_CLASS(softirq,
    >>
    >> TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
    >> @@ -89,11 +117,11 @@ DECLARE_EVENT_CLASS(softirq,
    >> TP_ARGS(h, vec),
    >>
    >> TP_STRUCT__entry(
    >> - __field( int, vec )
    >> + __field( unsigned int, vec )
    >> ),
    >>
    >> TP_fast_assign(
    >> - __entry->vec = (int)(h - vec);
    >> + __entry->vec = (unsigned int)(h - vec);
    >
    > Just curious, did you see the original as a bug?
    >
    > -- Steve
    >
    >> ),
    >>
    >> TP_printk("vec=%d [action=%s]", __entry->vec,
    >
    >
    > --
    > To unsubscribe from this list: send the line "unsubscribe netdev" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html
    >
    >




    \
     
     \ /
      Last update: 2010-06-25 02:53    [W:0.074 / U:32.976 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site