From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756388AbZENKw7 (ORCPT ); Thu, 14 May 2009 06:52:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753722AbZENKwt (ORCPT ); Thu, 14 May 2009 06:52:49 -0400 Received: from cn.fujitsu.com ([222.73.24.84]:56166 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1753450AbZENKwt (ORCPT ); Thu, 14 May 2009 06:52:49 -0400 Message-ID: <4A0BF82A.2070208@cn.fujitsu.com> Date: Thu, 14 May 2009 18:53:30 +0800 From: Xiao Guangrong User-Agent: Thunderbird 2.0.0.6 (Windows/20070728) MIME-Version: 1.0 To: mingo@elte.hu CC: Xiao Guangrong , Mathieu Desnoyers , Steven Rostedt , linux-kernel@vger.kernel.org, fweisbec@gmail.com, zhaolei@cn.fujitsu.com, laijs@cn.fujitsu.com, Li Zefan Subject: [PATCH v4] ftrace: add a tracepoint for __raise_softirq_irqoff() References: <49FFDF9C.7040505@cn.fujitsu.com> <20090505161604.GA15524@Krystal> <4A07D3B3.10605@cn.fujitsu.com> <20090511134019.GB10932@Krystal> <20090511142734.GA12722@Krystal> <20090511151353.GA14391@Krystal> <4A094677.5090900@cn.fujitsu.com> In-Reply-To: <4A094677.5090900@cn.fujitsu.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mathieu Desnoyers This patch is modified from Mathieu Desnoyers' patch. The original patch can be found here: http://marc.info/?l=linux-kernel&m=123791201816245&w=2 This tracepoint can trace the time stamp when softirq action is raised. Changelog for v1 -> v2: 1: Use TRACE_EVENT instead of DEFINE_TRACE 2: Move the tracepoint from raise_softirq_irqoff() to __raise_softirq_irqoff() Changelog for v2 -> v3: Move the definition of __raise_softifq_irqoff() to .c file when CONFIG_TRACEPOINTS is enabled, to avoid recursive includes Changelog for v3 -> v4: 1: Come back to v2, and use forward declarations to avoid recursive includes as Mathieu's suggestion 2: Modifiy the tracepoint name 3: Add comments for this tracepoint Signed-off-by: Mathieu Desnoyers Signed-off-by: Xiao Guangrong Review-by: Lai Jiangshan --- include/linux/interrupt.h | 9 ++++++++- include/trace/events/irq.h | 27 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index dd574d5..51e7909 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -18,6 +18,7 @@ #include #include #include +#include /* * These correspond to the IORESOURCE_IRQ_* defines in @@ -361,7 +362,13 @@ 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 32a9f7e..08fa63b 100644 --- a/include/trace/events/irq.h +++ b/include/trace/events/irq.h @@ -2,11 +2,13 @@ #define _TRACE_IRQ_H #include -#include #undef TRACE_SYSTEM #define TRACE_SYSTEM irq +struct irqaction; +struct softirq_action; + /** * irq_handler_entry - called immediately before the irq action handler * @irq: irq number @@ -128,6 +130,29 @@ TRACE_EVENT(softirq_exit, TP_printk("softirq=%d action=%s", __entry->vec, __get_str(name)) ); +/** + * softirq_raise - called immediately when a softirq is raised + * @nr: softirq vector number + */ +TRACE_EVENT(softirq_raise, + + TP_PROTO(unsigned int nr), + + TP_ARGS(nr), + + TP_STRUCT__entry( + __field( unsigned int, nr ) + __string( name, softirq_to_name[nr] ) + ), + + TP_fast_assign( + __entry->nr = nr; + __assign_str(name, softirq_to_name[nr]); + ), + + TP_printk("softirq=%u action=%s", __entry->nr, __get_str(name)) +); + #endif /* _TRACE_IRQ_H */ /* This part must be outside protection */ -- 1.6.1.2