All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Koki Sanagi <sanagi.koki@jp.fujitsu.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	nhorman@tuxdriver.com, scott.a.mcmillan@intel.com,
	laijs@cn.fujitsu.com, "H. Peter Anvin" <hpa@zytor.com>,
	LKML <linux-kernel@vger.kernel.org>,
	eric.dumazet@gmail.com, kaneshige.kenji@jp.fujitsu.com,
	David Miller <davem@davemloft.net>,
	izumi.taku@jp.fujitsu.com, kosaki.motohiro@jp.fujitsu.com,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	"Luck, Tony" <tony.luck@intel.com>
Subject: Re: [PATCH] tracing: Cleanup the convoluted softirq tracepoints
Date: Tue, 19 Oct 2010 09:22:37 -0400	[thread overview]
Message-ID: <20101019132236.GA19197@Krystal> (raw)
In-Reply-To: <alpine.LFD.2.00.1010191428560.6815@localhost6.localdomain6>

* Thomas Gleixner (tglx@linutronix.de) wrote:
> With the addition of trace_softirq_raise() the softirq tracepoint got
> even more convoluted. Why the tracepoints take two pointers to assign
> an integer is beyond my comprehension.
> 
> But adding an extra case which treats the first pointer as an unsigned
> long when the second pointer is NULL including the back and forth
> type casting is just horrible.
> 
> Convert the softirq tracepoints to take a single unsigned int argument
> for the softirq vector number and fix the call sites.

Well, there was originally a reason for this oddness. The in __do_softirq(),
"h - softirq_ve"c computation was not needed outside of the tracepoint handler
in the past, but it now seems to be required with the new inlined
"kstat_incr_softirqs_this_cpu()".

So yes, thanks to this recent change, it now makes sense to pull this
computation out of the tracepoints and do it unconditionally in the kernel code.

Feel free to put my:
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

Thanks,

Mathieu

> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
>  include/linux/interrupt.h  |    2 -
>  include/trace/events/irq.h |   54 ++++++++++++++++-----------------------------
>  kernel/softirq.c           |   14 ++++++-----
>  3 files changed, 29 insertions(+), 41 deletions(-)
> 
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index 531495d..0ac1949 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -410,7 +410,7 @@ extern void open_softirq(int nr, void (*action)(struct softirq_action *));
>  extern void softirq_init(void);
>  static inline void __raise_softirq_irqoff(unsigned int nr)
>  {
> -	trace_softirq_raise((struct softirq_action *)(unsigned long)nr, NULL);
> +	trace_softirq_raise(nr);
>  	or_softirq_pending(1UL << nr);
>  }
>  
> diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h
> index 6fa7cba..1c09820 100644
> --- a/include/trace/events/irq.h
> +++ b/include/trace/events/irq.h
> @@ -86,76 +86,62 @@ TRACE_EVENT(irq_handler_exit,
>  
>  DECLARE_EVENT_CLASS(softirq,
>  
> -	TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
> +	TP_PROTO(unsigned int vec_nr),
>  
> -	TP_ARGS(h, vec),
> +	TP_ARGS(vec_nr),
>  
>  	TP_STRUCT__entry(
> -		__field(	int,	vec			)
> +		__field(	unsigned int,	vec	)
>  	),
>  
>  	TP_fast_assign(
> -		if (vec)
> -			__entry->vec = (int)(h - vec);
> -		else
> -			__entry->vec = (int)(long)h;
> +		__entry->vec = vec_nr;
>  	),
>  
> -	TP_printk("vec=%d [action=%s]", __entry->vec,
> +	TP_printk("vec=%u [action=%s]", __entry->vec,
>  		  show_softirq_name(__entry->vec))
>  );
>  
>  /**
>   * softirq_entry - called immediately before the softirq handler
> - * @h: pointer to struct softirq_action
> - * @vec: pointer to first struct softirq_action in softirq_vec array
> + * @vec_nr:  softirq vector number
>   *
> - * The @h parameter, contains a pointer to the struct softirq_action
> - * which has a pointer to the action handler that is called. By subtracting
> - * the @vec pointer from the @h pointer, we can determine the softirq
> - * number. Also, when used in combination with the softirq_exit tracepoint
> - * we can determine the softirq latency.
> + * When used in combination with the softirq_exit tracepoint
> + * we can determine the softirq handler runtine.
>   */
>  DEFINE_EVENT(softirq, softirq_entry,
>  
> -	TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
> +	TP_PROTO(unsigned int vec_nr),
>  
> -	TP_ARGS(h, vec)
> +	TP_ARGS(vec_nr)
>  );
>  
>  /**
>   * softirq_exit - called immediately after the softirq handler returns
> - * @h: pointer to struct softirq_action
> - * @vec: pointer to first struct softirq_action in softirq_vec array
> + * @vec_nr:  softirq vector number
>   *
> - * The @h parameter contains a pointer to the struct softirq_action
> - * that has handled the softirq. By subtracting the @vec pointer from
> - * the @h pointer, we can determine the softirq number. Also, when used in
> - * combination with the softirq_entry tracepoint we can determine the softirq
> - * latency.
> + * When used in combination with the softirq_entry tracepoint
> + * we can determine the softirq handler runtine.
>   */
>  DEFINE_EVENT(softirq, softirq_exit,
>  
> -	TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
> +	TP_PROTO(unsigned int vec_nr),
>  
> -	TP_ARGS(h, vec)
> +	TP_ARGS(vec_nr)
>  );
>  
>  /**
>   * softirq_raise - called immediately when a softirq is raised
> - * @h: pointer to struct softirq_action
> - * @vec: pointer to first struct softirq_action in softirq_vec array
> + * @vec_nr:  softirq vector number
>   *
> - * The @h parameter contains a pointer to the softirq vector number which is
> - * raised. @vec is NULL and it means @h includes vector number not
> - * softirq_action. When used in combination with the softirq_entry tracepoint
> - * we can determine the softirq raise latency.
> + * When used in combination with the softirq_entry tracepoint
> + * we can determine the softirq raise to run latency.
>   */
>  DEFINE_EVENT(softirq, softirq_raise,
>  
> -	TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
> +	TP_PROTO(unsigned int vec_nr),
>  
> -	TP_ARGS(h, vec)
> +	TP_ARGS(vec_nr)
>  );
>  
>  #endif /*  _TRACE_IRQ_H */
> diff --git a/kernel/softirq.c b/kernel/softirq.c
> index 07b4f1b..c0a9ea5 100644
> --- a/kernel/softirq.c
> +++ b/kernel/softirq.c
> @@ -212,18 +212,20 @@ restart:
>  
>  	do {
>  		if (pending & 1) {
> +			unsigned int vec_nr = h - softirq_vec;
>  			int prev_count = preempt_count();
> -			kstat_incr_softirqs_this_cpu(h - softirq_vec);
>  
> -			trace_softirq_entry(h, softirq_vec);
> +			kstat_incr_softirqs_this_cpu(vec_nr);
> +
> +			trace_softirq_entry(vec_nr);
>  			h->action(h);
> -			trace_softirq_exit(h, softirq_vec);
> +			trace_softirq_exit(vec_nr);
>  			if (unlikely(prev_count != preempt_count())) {
>  				printk(KERN_ERR "huh, entered softirq %td %s %p"
>  				       "with preempt_count %08x,"
> -				       " exited with %08x?\n", h - softirq_vec,
> -				       softirq_to_name[h - softirq_vec],
> -				       h->action, prev_count, preempt_count());
> +				       " exited with %08x?\n", vec_nr,
> +				       softirq_to_name[vec_nr], h->action,
> +				       prev_count, preempt_count());
>  				preempt_count() = prev_count;
>  			}
>  

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

  parent reply	other threads:[~2010-10-19 13:22 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-23  9:41 [PATCH v4 0/5] netdev: show a process of packets Koki Sanagi
2010-08-23  9:42 ` [PATCH v4 1/5] irq: add tracepoint to softirq_raise Koki Sanagi
2010-09-03 15:29   ` Frederic Weisbecker
2010-09-03 15:39     ` Steven Rostedt
2010-09-03 15:42       ` Frederic Weisbecker
2010-09-03 15:43     ` Steven Rostedt
2010-09-03 15:50       ` Frederic Weisbecker
2010-09-06  1:46         ` Koki Sanagi
2010-09-08  8:33   ` [tip:perf/core] irq: Add " tip-bot for Lai Jiangshan
2010-09-08 11:25     ` [sparc build bug] " Ingo Molnar
2010-09-08 12:26       ` [PATCH] irq: Fix circular headers dependency Frederic Weisbecker
2010-09-09 19:54         ` [tip:perf/core] " tip-bot for Frederic Weisbecker
2010-10-18  9:44       ` [sparc build bug] Re: [tip:perf/core] irq: Add tracepoint to softirq_raise Peter Zijlstra
2010-10-18 10:11         ` Peter Zijlstra
2010-10-18 10:26           ` Heiko Carstens
2010-10-18 10:48         ` Peter Zijlstra
2010-10-19 10:58           ` Koki Sanagi
2010-10-19 11:25             ` Peter Zijlstra
2010-10-19 13:00             ` [PATCH] tracing: Cleanup the convoluted softirq tracepoints Thomas Gleixner
2010-10-19 13:08               ` Peter Zijlstra
2010-10-19 13:22               ` Mathieu Desnoyers [this message]
2010-10-19 13:41                 ` Thomas Gleixner
2010-10-19 13:54                   ` Steven Rostedt
2010-10-19 14:07                     ` Thomas Gleixner
2010-10-19 14:28                       ` Mathieu Desnoyers
2010-10-19 19:49                         ` Thomas Gleixner
2010-10-19 20:55                           ` Steven Rostedt
2010-10-19 21:07                             ` Thomas Gleixner
2010-10-19 21:23                               ` Steven Rostedt
2010-10-19 21:48                                 ` H. Peter Anvin
2010-10-19 22:23                                   ` Steven Rostedt
2010-10-19 22:26                                     ` H. Peter Anvin
2010-10-19 22:27                                     ` Peter Zijlstra
2010-10-19 23:39                                       ` H. Peter Anvin
2010-10-19 23:45                                         ` Steven Rostedt
2010-10-20  0:43                                         ` Jason Baron
2010-10-19 22:41                                   ` Mathieu Desnoyers
2010-10-19 22:49                                     ` H. Peter Anvin
2010-10-19 23:05                                       ` Steven Rostedt
2010-10-19 23:09                                         ` H. Peter Anvin
2010-10-20 15:27                                         ` Jason Baron
2010-10-20 15:41                                           ` Mathieu Desnoyers
2010-10-25 21:54                                           ` H. Peter Anvin
2010-10-25 22:01                                             ` Mathieu Desnoyers
2010-10-25 22:12                                               ` H. Peter Anvin
2010-10-25 22:19                                                 ` H. Peter Anvin
2010-10-25 22:55                                                 ` Mathieu Desnoyers
2010-10-26  0:39                                                   ` Steven Rostedt
2010-10-26  1:14                                                     ` Mathieu Desnoyers
2010-10-19 22:04                                 ` Thomas Gleixner
2010-10-19 22:33                                   ` Steven Rostedt
2010-10-21 16:18                                     ` Thomas Gleixner
2010-10-21 17:05                                       ` Steven Rostedt
2010-10-21 19:56                                         ` Thomas Gleixner
2010-10-25 22:31                                           ` H. Peter Anvin
2010-10-19 21:45                             ` Thomas Gleixner
2010-10-19 22:14                               ` Steven Rostedt
2010-10-19 21:16                           ` David Daney
2010-10-19 21:32                             ` Jason Baron
2010-10-19 21:38                               ` David Daney
2010-10-19 21:47                             ` Steven Rostedt
2010-10-19 21:28                           ` Jason Baron
2010-10-19 21:55                             ` Thomas Gleixner
2010-10-19 22:17                               ` Thomas Gleixner
2010-10-20  1:36                                 ` Steven Rostedt
2010-10-20  1:52                                   ` Jason Baron
2010-10-25 22:32                                     ` H. Peter Anvin
2010-10-19 22:38                               ` Jason Baron
2010-10-19 22:44                                 ` H. Peter Anvin
2010-10-19 22:56                                   ` Steven Rostedt
2010-10-19 22:57                                     ` H. Peter Anvin
2010-10-19 14:46                       ` Steven Rostedt
2010-10-19 14:00                   ` Mathieu Desnoyers
2010-10-21 14:52               ` [tip:perf/core] " tip-bot for Thomas Gleixner
2010-08-23  9:43 ` [PATCH v4 2/5] napi: convert trace_napi_poll to TRACE_EVENT Koki Sanagi
2010-08-24  3:52   ` David Miller
2010-09-08  8:34   ` [tip:perf/core] napi: Convert " tip-bot for Neil Horman
2010-08-23  9:45 ` [PATCH v4 3/5] netdev: add tracepoints to netdev layer Koki Sanagi
2010-08-24  3:53   ` David Miller
2010-09-08  8:34   ` [tip:perf/core] netdev: Add " tip-bot for Koki Sanagi
2010-08-23  9:46 ` [PATCH v4 4/5] skb: add tracepoints to freeing skb Koki Sanagi
2010-08-24  3:53   ` David Miller
2010-09-08  8:35   ` [tip:perf/core] skb: Add " tip-bot for Koki Sanagi
2010-08-23  9:47 ` [PATCH v4 5/5] perf:add a script shows a process of packet Koki Sanagi
2010-08-24  3:53   ` David Miller
2010-09-07 16:57   ` Frederic Weisbecker
2010-09-08  8:35   ` [tip:perf/core] perf: Add a script to show packets processing tip-bot for Koki Sanagi
2010-08-30 23:50 ` [PATCH v4 0/5] netdev: show a process of packets Steven Rostedt
2010-09-03  2:10   ` Koki Sanagi
2010-09-03  2:17     ` David Miller
2010-09-03  2:55       ` Koki Sanagi
2010-09-03  4:46         ` Frederic Weisbecker
2010-09-03  5:12           ` Koki Sanagi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101019132236.GA19197@Krystal \
    --to=mathieu.desnoyers@efficios.com \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=hpa@zytor.com \
    --cc=izumi.taku@jp.fujitsu.com \
    --cc=kaneshige.kenji@jp.fujitsu.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nhorman@tuxdriver.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sanagi.koki@jp.fujitsu.com \
    --cc=scott.a.mcmillan@intel.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.