All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
	niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, Valdis.Kletnieks@vt.edu,
	dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com,
	fweisbec@gmail.com, patches@linaro.org
Subject: Re: [PATCH tip/core/rcu 14/15] rcu: Use for_each_rcu_flavor() in TREE_RCU tracing
Date: Fri, 15 Jun 2012 16:59:57 -0700	[thread overview]
Message-ID: <20120615235957.GF7613@leaf> (raw)
In-Reply-To: <1339794370-28119-14-git-send-email-paulmck@linux.vnet.ibm.com>

On Fri, Jun 15, 2012 at 02:06:09PM -0700, Paul E. McKenney wrote:
> From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> 
> This commit applies the new for_each_rcu_flavor() macro to the
> kernel/rcutree_trace.c file.
> 
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> ---
>  kernel/rcutree_trace.c |   95 +++++++++++++++++++-----------------------------
>  1 files changed, 38 insertions(+), 57 deletions(-)
> 
> diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c
> index 057408b..c618665 100644
> --- a/kernel/rcutree_trace.c
> +++ b/kernel/rcutree_trace.c
> @@ -48,22 +48,18 @@
>  
>  static void print_rcubarrier(struct seq_file *m, struct rcu_state *rsp)
>  {
> -	seq_printf(m, "%c bcc: %d nbd: %lu\n",
> -		   rsp->rcu_barrier_in_progress ? 'B' : '.',
> +	seq_printf(m, "%s: %c bcc: %d nbd: %lu\n",
> +		   rsp->name, rsp->rcu_barrier_in_progress ? 'B' : '.',
>  		   atomic_read(&rsp->barrier_cpu_count),
>  		   rsp->n_barrier_done);
>  }
>  
>  static int show_rcubarrier(struct seq_file *m, void *unused)
>  {
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	seq_puts(m, "rcu_preempt: ");
> -	print_rcubarrier(m, &rcu_preempt_state);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	seq_puts(m, "rcu_sched: ");
> -	print_rcubarrier(m, &rcu_sched_state);
> -	seq_puts(m, "rcu_bh: ");
> -	print_rcubarrier(m, &rcu_bh_state);
> +	struct rcu_state *rsp;
> +
> +	for_each_rcu_flavor(rsp)
> +		print_rcubarrier(m, rsp);

Now that you call this function exactly once, I'd suggest inlining it
for clarity; I don't think having it as a separate function makes sense
anymore.

> @@ -129,24 +125,16 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
>  		   rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
>  }
>  
> -#define PRINT_RCU_DATA(name, func, m) \
> -	do { \
> -		int _p_r_d_i; \
> -		\
> -		for_each_possible_cpu(_p_r_d_i) \
> -			func(m, &per_cpu(name, _p_r_d_i)); \
> -	} while (0)
> -
>  static int show_rcudata(struct seq_file *m, void *unused)
>  {
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	seq_puts(m, "rcu_preempt:\n");
> -	PRINT_RCU_DATA(rcu_preempt_data, print_one_rcu_data, m);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	seq_puts(m, "rcu_sched:\n");
> -	PRINT_RCU_DATA(rcu_sched_data, print_one_rcu_data, m);
> -	seq_puts(m, "rcu_bh:\n");
> -	PRINT_RCU_DATA(rcu_bh_data, print_one_rcu_data, m);
> +	int cpu;
> +	struct rcu_state *rsp;
> +
> +	for_each_rcu_flavor(rsp) {
> +		seq_printf(m, "%s:\n", rsp->name);
> +		for_each_possible_cpu(cpu)
> +		print_one_rcu_data(m, per_cpu_ptr(rsp->rda, cpu));
> +	}

As above, I'd suggest inlining print_one_rcu_data.

Also, you need to indent the body of the for_each_possible_cpu loop.

> @@ -200,6 +188,9 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)
>  
>  static int show_rcudata_csv(struct seq_file *m, void *unused)
>  {
> +	int cpu;
> +	struct rcu_state *rsp;
> +
>  	seq_puts(m, "\"CPU\",\"Online?\",\"c\",\"g\",\"pq\",\"pgp\",\"pq\",");
>  	seq_puts(m, "\"dt\",\"dt nesting\",\"dt NMI nesting\",\"df\",");
>  	seq_puts(m, "\"of\",\"qll\",\"ql\",\"qs\"");
> @@ -207,14 +198,11 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)
>  	seq_puts(m, "\"kt\",\"ktl\"");
>  #endif /* #ifdef CONFIG_RCU_BOOST */
>  	seq_puts(m, ",\"b\",\"ci\",\"co\",\"ca\"\n");
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	seq_puts(m, "\"rcu_preempt:\"\n");
> -	PRINT_RCU_DATA(rcu_preempt_data, print_one_rcu_data_csv, m);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	seq_puts(m, "\"rcu_sched:\"\n");
> -	PRINT_RCU_DATA(rcu_sched_data, print_one_rcu_data_csv, m);
> -	seq_puts(m, "\"rcu_bh:\"\n");
> -	PRINT_RCU_DATA(rcu_bh_data, print_one_rcu_data_csv, m);
> +	for_each_rcu_flavor(rsp) {
> +		seq_printf(m, "\"%s:\"\n", rsp->name);
> +		for_each_possible_cpu(cpu)
> +			print_one_rcu_data_csv(m, per_cpu_ptr(rsp->rda, cpu));
> +	}

As above, I'd suggest inlining print_one_rcu_data_csv.

> @@ -304,9 +292,9 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)
>  	struct rcu_node *rnp;
>  
>  	gpnum = rsp->gpnum;
> -	seq_printf(m, "c=%lu g=%lu s=%d jfq=%ld j=%x "
> +	seq_printf(m, "%s: c=%lu g=%lu s=%d jfq=%ld j=%x "
>  		      "nfqs=%lu/nfqsng=%lu(%lu) fqlh=%lu oqlen=%ld/%ld\n",
> -		   rsp->completed, gpnum, rsp->fqs_state,
> +		   rsp->name, rsp->completed, gpnum, rsp->fqs_state,
>  		   (long)(rsp->jiffies_force_qs - jiffies),
>  		   (int)(jiffies & 0xffff),
>  		   rsp->n_force_qs, rsp->n_force_qs_ngp,
> @@ -329,14 +317,10 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)
>  
>  static int show_rcuhier(struct seq_file *m, void *unused)
>  {
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	seq_puts(m, "rcu_preempt:\n");
> -	print_one_rcu_state(m, &rcu_preempt_state);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	seq_puts(m, "rcu_sched:\n");
> -	print_one_rcu_state(m, &rcu_sched_state);
> -	seq_puts(m, "rcu_bh:\n");
> -	print_one_rcu_state(m, &rcu_bh_state);
> +	struct rcu_state *rsp;
> +
> +	for_each_rcu_flavor(rsp)
> +		print_one_rcu_state(m, rsp);

As above, I'd suggest inlining print_one_rcu_state.

> @@ -377,11 +361,10 @@ static void show_one_rcugp(struct seq_file *m, struct rcu_state *rsp)
>  
>  static int show_rcugp(struct seq_file *m, void *unused)
>  {
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	show_one_rcugp(m, &rcu_preempt_state);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	show_one_rcugp(m, &rcu_sched_state);
> -	show_one_rcugp(m, &rcu_bh_state);
> +	struct rcu_state *rsp;
> +
> +	for_each_rcu_flavor(rsp)
> +		show_one_rcugp(m, rsp);

As above, I'd suggest inlining show_one_rcugp.

> @@ -430,14 +413,12 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)
>  
>  static int show_rcu_pending(struct seq_file *m, void *unused)
>  {
> -#ifdef CONFIG_TREE_PREEMPT_RCU
> -	seq_puts(m, "rcu_preempt:\n");
> -	print_rcu_pendings(m, &rcu_preempt_state);
> -#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
> -	seq_puts(m, "rcu_sched:\n");
> -	print_rcu_pendings(m, &rcu_sched_state);
> -	seq_puts(m, "rcu_bh:\n");
> -	print_rcu_pendings(m, &rcu_bh_state);
> +	struct rcu_state *rsp;
> +
> +	for_each_rcu_flavor(rsp) {
> +		seq_printf(m, "%s:\n", rsp->name);
> +		print_rcu_pendings(m, rsp);
> +	}

As above, I'd suggest inlining print_rcu_pendings.

- Josh Triplett

  reply	other threads:[~2012-06-16  0:00 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-15 21:05 [PATCH tip/core/rcu 0/15] Improvements to rcu_barrier() and RT response on big systems Paul E. McKenney
2012-06-15 21:05 ` [PATCH tip/core/rcu 01/15] rcu: Control RCU_FANOUT_LEAF from boot-time parameter Paul E. McKenney
2012-06-15 21:05   ` [PATCH tip/core/rcu 02/15] rcu: Size rcu_node tree from nr_cpu_ids rather than NR_CPUS Paul E. McKenney
2012-06-15 21:47     ` Josh Triplett
2012-06-16  0:37       ` Paul E. McKenney
2012-06-16  5:17         ` Josh Triplett
2012-06-16  6:38           ` Paul E. McKenney
2012-06-16  9:17             ` Josh Triplett
2012-06-16 14:44               ` Paul E. McKenney
2012-06-16 14:51                 ` Paul E. McKenney
2012-06-16 20:31                   ` Josh Triplett
2012-06-15 21:05   ` [PATCH tip/core/rcu 03/15] rcu: Prevent excessive line length in RCU_STATE_INITIALIZER() Paul E. McKenney
2012-06-15 21:48     ` Josh Triplett
2012-06-15 21:05   ` [PATCH tip/core/rcu 04/15] rcu: Place pointer to call_rcu() in rcu_data structure Paul E. McKenney
2012-06-15 22:08     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 05/15] rcu: Move _rcu_barrier()'s rcu_head structures to rcu_data structures Paul E. McKenney
2012-06-15 22:19     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 06/15] rcu: Move rcu_barrier_cpu_count to rcu_state structure Paul E. McKenney
2012-06-15 22:44     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 07/15] rcu: Move rcu_barrier_completion " Paul E. McKenney
2012-06-15 22:51     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 08/15] rcu: Move rcu_barrier_mutex " Paul E. McKenney
2012-06-15 22:55     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 09/15] rcu: Increasing rcu_barrier() concurrency Paul E. McKenney
2012-06-15 23:31     ` Josh Triplett
2012-06-16  0:21       ` Steven Rostedt
2012-06-16  0:49         ` Paul E. McKenney
2012-06-16  0:48       ` Paul E. McKenney
2012-06-15 21:06   ` [PATCH tip/core/rcu 10/15] rcu: Add tracing for _rcu_barrier() Paul E. McKenney
2012-06-15 23:35     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 11/15] rcu: Add rcu_barrier() statistics to debugfs tracing Paul E. McKenney
2012-06-15 23:38     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 12/15] rcu: Remove unneeded __rcu_process_callbacks() argument Paul E. McKenney
2012-06-15 23:37     ` Josh Triplett
2012-06-15 21:06   ` [PATCH tip/core/rcu 13/15] rcu: Introduce for_each_rcu_flavor() and use it Paul E. McKenney
2012-06-15 23:52     ` Josh Triplett
2012-06-16  1:01       ` Paul E. McKenney
2012-06-16  5:35         ` Josh Triplett
2012-06-16  6:36           ` Paul E. McKenney
2012-06-15 21:06   ` [PATCH tip/core/rcu 14/15] rcu: Use for_each_rcu_flavor() in TREE_RCU tracing Paul E. McKenney
2012-06-15 23:59     ` Josh Triplett [this message]
2012-06-16  0:56       ` Paul E. McKenney
2012-06-16  5:22         ` Josh Triplett
2012-06-16  6:42           ` Paul E. McKenney
2012-06-15 21:06   ` [PATCH tip/core/rcu 15/15] rcu: RCU_SAVE_DYNTICK code no longer ever dead Paul E. McKenney
2012-06-16  0:02     ` Josh Triplett
2012-06-16  0:04       ` Josh Triplett
2012-06-16  1:04         ` Paul E. McKenney
2012-06-15 21:43   ` [PATCH tip/core/rcu 01/15] rcu: Control RCU_FANOUT_LEAF from boot-time parameter Josh Triplett
2012-06-15 22:10     ` Paul E. McKenney

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=20120615235957.GF7613@leaf \
    --to=josh@joshtriplett.org \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=eric.dumazet@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=patches@linaro.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.