All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	jiangshanlai@gmail.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org,
	dhowells@redhat.com, edumazet@google.com, dvhart@linux.intel.com,
	fweisbec@gmail.com, oleg@redhat.com, bobby.prani@gmail.com
Subject: Re: [PATCH tip/core/rcu 6/8] rcutorture: Print symbolic name for ->gp_state
Date: Sat, 5 Dec 2015 17:54:36 -0800	[thread overview]
Message-ID: <20151206015436.GM28602@linux.vnet.ibm.com> (raw)
In-Reply-To: <20151205010421.GC27128@cloud>

On Fri, Dec 04, 2015 at 05:04:21PM -0800, Josh Triplett wrote:
> On Fri, Dec 04, 2015 at 04:23:50PM -0800, Paul E. McKenney wrote:
> > Currently, ->gp_state is printed as an integer, which slows debugging.
> > This commit therefore prints a symbolic name in addition to the integer.
> > 
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > [ Updated to fix relational operator called out by Dan Carpenter. ]
> > ---
> >  kernel/rcu/tree.c | 15 +++++++++++++--
> >  kernel/rcu/tree.h |  9 +++++++++
> >  2 files changed, 22 insertions(+), 2 deletions(-)
> > 
> > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > index 7b78c88e19a3..491c99a73996 100644
> > --- a/kernel/rcu/tree.c
> > +++ b/kernel/rcu/tree.c
> > @@ -1187,6 +1187,16 @@ static void record_gp_stall_check_time(struct rcu_state *rsp)
> >  }
> >  
> >  /*
> > + * Convert a ->gp_state value to a character string.
> > + */
> > +static char *gp_state_getname(short gs)
> 
> Same comment about "const char *"

Good point, fixed!

> > +{
> > +	if (gs < 0 || gs >= ARRAY_SIZE(gp_state_names))
> > +		return "???";
> > +	return gp_state_names[gs];
> > +}
> > +
> > +/*
> >   * Complain about starvation of grace-period kthread.
> >   */
> >  static void rcu_check_gp_kthread_starvation(struct rcu_state *rsp)
> > @@ -1197,10 +1207,11 @@ static void rcu_check_gp_kthread_starvation(struct rcu_state *rsp)
> >  	j = jiffies;
> >  	gpa = READ_ONCE(rsp->gp_activity);
> >  	if (j - gpa > 2 * HZ) {
> > -		pr_err("%s kthread starved for %ld jiffies! g%lu c%lu f%#x s%d ->state=%#lx\n",
> > +		pr_err("%s kthread starved for %ld jiffies! g%lu c%lu f%#x %s(%d) ->state=%#lx\n",
> >  		       rsp->name, j - gpa,
> >  		       rsp->gpnum, rsp->completed,
> > -		       rsp->gp_flags, rsp->gp_state,
> > +		       rsp->gp_flags,
> > +		       gp_state_getname(rsp->gp_state), rsp->gp_state,
> >  		       rsp->gp_kthread ? rsp->gp_kthread->state : ~0);
> >  		if (rsp->gp_kthread)
> >  			sched_show_task(rsp->gp_kthread);
> > diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
> > index f32bebb6bc90..f0304988e3f8 100644
> > --- a/kernel/rcu/tree.h
> > +++ b/kernel/rcu/tree.h
> > @@ -544,6 +544,15 @@ struct rcu_state {
> >  #define RCU_GP_DOING_FQS 4	/* Wait done for force-quiescent-state time. */
> >  #define RCU_GP_CLEANUP   5	/* Grace-period cleanup started. */
> >  #define RCU_GP_CLEANED   6	/* Grace-period cleanup complete. */
> > +static char * const gp_state_names[] = {
> 
> Same comment about "const char * const", but also, should this really go
> in a header file?  Do any circumstances exist where this header could
> get included in more than one source file in a given build?  If so,
> multiple copies of this array could potentially end up in the binary, if
> the compiler fails to merge them.

I added the const.

However, I left the array in the .h file.  The issue is that the #defines
really have to be in the tree.h file.  Given that, if I move the array
elsewhere, they will very likely drift out of sync.  So this sounds like
a job for the compiler/linker...

Ah, but there is another approach.  It turns out that tree.h in included
only from tree.c and tree_trace.c.  And tree_trace.c defines a CPP symbol
RCU_TREE_NONCORE that is used elsewhere in tree.h to keep tree_trace.c's
mitts off a number of attractive but dangerous functions.  So I just put
the array under "#ifndef RCU_TREE_NONCORE".

Fair enough?

							Thanx, Paul

> > +	"RCU_GP_IDLE",
> > +	"RCU_GP_WAIT_GPS",
> > +	"RCU_GP_DONE_GPS",
> > +	"RCU_GP_WAIT_FQS",
> > +	"RCU_GP_DOING_FQS",
> > +	"RCU_GP_CLEANUP",
> > +	"RCU_GP_CLEANED",
> > +};
> >  
> >  extern struct list_head rcu_struct_flavors;
> >  
> > -- 
> > 2.5.2
> > 
> 


  reply	other threads:[~2015-12-06  1:53 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-05  0:23 [PATCH tip/core/rcu 0/8] Torture-test updates for 4.5 Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 1/8] rcutorture: Add batch number to script printout Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 2/8] rcutorture: Dump stack when GP kthread stalls Paul E. McKenney
2015-12-05  0:59   ` Josh Triplett
2015-12-06  1:45     ` Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 3/8] rcutorture: Default grace period to three minutes, allow override Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 4/8] rcutorture: Remove CONFIG_RCU_USER_QS from rcutorture selftest doc Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 5/8] rcutorture: Print symbolic name for rcu_torture_writer_state Paul E. McKenney
2015-12-05  1:02   ` Josh Triplett
2015-12-06  1:46     ` Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 6/8] rcutorture: Print symbolic name for ->gp_state Paul E. McKenney
2015-12-05  1:04   ` Josh Triplett
2015-12-06  1:54     ` Paul E. McKenney [this message]
2015-12-06  1:56       ` Josh Triplett
2015-12-05  0:23 ` [PATCH tip/core/rcu 7/8] torture: Abbreviate console error dump Paul E. McKenney
2015-12-05  0:23 ` [PATCH tip/core/rcu 8/8] torture: Place console.log files correctly from the get-go Paul E. McKenney
2015-12-05  1:05 ` [PATCH tip/core/rcu 0/8] Torture-test updates for 4.5 Josh Triplett

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=20151206015436.GM28602@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=bobby.prani@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=dvhart@linux.intel.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.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.