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, dhowells@redhat.com, edumazet@google.com,
	darren@dvhart.com, fweisbec@gmail.com, sbw@mit.edu,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Sedat Dilek <sedat.dilek@gmail.com>,
	Davidlohr Bueso <davidlohr.bueso@hp.com>,
	Rik van Riel <riel@surriel.com>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH tip/core/rcu 1/5] rcu: Add duplicate-callback tests to rcutorture
Date: Mon, 19 Aug 2013 20:20:14 -0700	[thread overview]
Message-ID: <20130820032014.GA4416@leaf> (raw)
In-Reply-To: <20130820020558.GW29406@linux.vnet.ibm.com>

On Mon, Aug 19, 2013 at 07:05:58PM -0700, Paul E. McKenney wrote:
> On Mon, Aug 19, 2013 at 10:16:52AM -0700, Josh Triplett wrote:
> > On Mon, Aug 19, 2013 at 09:09:45AM -0700, Paul E. McKenney wrote:
> > > On Sun, Aug 18, 2013 at 09:19:25PM -0700, Josh Triplett wrote:
> > > > On Sun, Aug 18, 2013 at 08:55:28PM -0700, Paul E. McKenney wrote:
> > > > > On Sat, Aug 17, 2013 at 07:54:20PM -0700, Josh Triplett wrote:
> > > > > > On Sat, Aug 17, 2013 at 07:25:13PM -0700, Paul E. McKenney wrote:
> > > > > > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> > > > > > > 
> > > > > > > This commit adds a object_debug option to rcutorture to allow the
> > > > > > > debug-object-based checks for duplicate call_rcu() invocations to
> > > > > > > be deterministically tested.
> > > > > > > 
> > > > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > > > > > > Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
> > > > > > > Cc: Sedat Dilek <sedat.dilek@gmail.com>
> > > > > > > Cc: Davidlohr Bueso <davidlohr.bueso@hp.com>
> > > > > > > Cc: Rik van Riel <riel@surriel.com>
> > > > > > > Cc: Thomas Gleixner <tglx@linutronix.de>
> > > > > > > Cc: Linus Torvalds <torvalds@linux-foundation.org>
> > > > > > > Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
> > > > > > 
> > > > > > Two comments below; with those fixed,
> > > > > > Reviewed-by: Josh Triplett <josh@joshtriplett.org>
> > > > > > 
> > > > > > > ---
> > > > > > > @@ -100,6 +101,8 @@ module_param(fqs_stutter, int, 0444);
> > > > > > >  MODULE_PARM_DESC(fqs_stutter, "Wait time between fqs bursts (s)");
> > > > > > >  module_param(n_barrier_cbs, int, 0444);
> > > > > > >  MODULE_PARM_DESC(n_barrier_cbs, "# of callbacks/kthreads for barrier testing");
> > > > > > > +module_param(object_debug, int, 0444);
> > > > > > > +MODULE_PARM_DESC(object_debug, "Enable debug-object double call_rcu() testing");
> > > > > > 
> > > > > > modules-next has a change to ignore and warn about
> > > > > > unknown module parameters.  Thus, I'd suggest wrapping the ifdef around
> > > > > > this module parameter, so it doesn't exist at all without
> > > > > > CONFIG_DEBUG_OBJECTS_RCU_HEAD.
> > > > > > 
> > > > > > Alternatively, consider providing the test unconditionally, and just
> > > > > > printing a big warning message saying that it's going to cause
> > > > > > corruption in the !CONFIG_DEBUG_OBJECTS_RCU_HEAD case.
> > > > > 
> > > > > I currently do something like the above.  The module parameter
> > > > > is defined unconditionally, but the actual tests are under #ifdef
> > > > > CONFIG_DEBUG_OBJECTS_RCU_HEAD.  If you specify object_debug for a
> > > > > !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel, the pr_alert() below happens,
> > > > > and the test is omitted, thus avoiding the list corruption.
> > > > > 
> > > > > Seem reasonable?
> > > > 
> > > > That's exactly the bit I was commenting on.  I'm saying that you should
> > > > either make the test unconditional (perhaps with a warning saying it's
> > > > about to cause list corruption), or you should compile out the module
> > > > parameter as well and then you don't need the pr_alert (since current
> > > > kernels will emit a warning when you pass a non-existent module
> > > > parameter).
> > > > 
> > > > Personally, I'd go with the latter.
> > > 
> > > Ah, the problem is the ugly ifdef in the middle of a function.  Yeah,
> > > that is a problem in need of fixing.  No idea what I was thinking...
> > > 
> > > How about if I pull that block of code out into its own function, and
> > > #ifdef the function body.  For example, something like that shown below.
> > [...]
> > > static void rcu_test_debug_objects(void)
> > > {
> > > #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD
> > > 	struct rcu_head rh1;
> > > 	struct rcu_head rh2;
> > > 
> > > 	init_rcu_head_on_stack(&rh1);
> > > 	init_rcu_head_on_stack(&rh2);
> > > 	pr_alert("rcutorture: WARN: Duplicate call_rcu() test starting.\n");
> > > 	local_irq_disable(); /* Make it hard to finish grace period. */
> > > 	call_rcu(&rh1, rcu_torture_leak_cb); /* start grace period. */
> > > 	call_rcu(&rh2, rcu_torture_err_cb);
> > > 	call_rcu(&rh2, rcu_torture_err_cb); /* duplicate callback. */
> > > 	local_irq_enable();
> > > 	rcu_barrier();
> > > 	pr_alert("rcutorture: WARN: Duplicate call_rcu() test complete.\n");
> > > 	destroy_rcu_head_on_stack(&rh1);
> > > 	destroy_rcu_head_on_stack(&rh2);
> > > #else /* #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
> > > 	pr_alert("rcutorture: !CONFIG_DEBUG_OBJECTS_RCU_HEAD, not testing duplicate call_rcu()\n");
> > > #endif /* #else #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
> > > }
> > 
> > That's a major improvement, but I'd still suggest a couple more changes:
> > move the if for the config option into that function inside the ifdef,
> > wrap the config parameter itself in an ifdef so it doesn't exist without
> > CONFIG_DEBUG_OBJECTS_RCU_HEAD, and drop the #else branch since the
> > kernel will already emit a warning if you use the module parameter with
> > !CONFIG_DEBUG_OBJECTS_RCU_HEAD.
> 
> I really feel the need to distinguish between "that is never a valid
> parameter to rcutorture" (given by the module-parameter parser) and
> "that parameter is valid, but cannot be used in this case, and here
> are the consequences", so I will keep the pr_alert().  But definitely
> fix the mid-function #ifdef!

OK; I can live with that.
Reviewed-by: Josh Triplett <josh@joshtriplett.org>

  reply	other threads:[~2013-08-20  3:20 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-18  2:24 [PATCH tip/core/rcu 0/5] rcutorture updates for 3.12 Paul E. McKenney
2013-08-18  2:25 ` [PATCH tip/core/rcu 1/5] rcu: Add duplicate-callback tests to rcutorture Paul E. McKenney
2013-08-18  2:25   ` [PATCH tip/core/rcu 2/5] rcu: Increase rcutorture test coverage Paul E. McKenney
2013-08-18  2:25   ` [PATCH tip/core/rcu 3/5] rcu: Sort rcutorture module parameters Paul E. McKenney
2013-08-18  2:57     ` Josh Triplett
2013-08-19  4:03       ` Paul E. McKenney
2013-08-18  2:25   ` [PATCH tip/core/rcu 4/5] rcu: Remove unused variable from rcu_torture_writer() Paul E. McKenney
2013-08-18  2:25   ` [PATCH tip/core/rcu 5/5] rcu: Make rcutorture emit online failures if verbose Paul E. McKenney
2013-08-18  2:59     ` Josh Triplett
2013-08-19  4:05       ` Paul E. McKenney
2013-08-18  2:54   ` [PATCH tip/core/rcu 1/5] rcu: Add duplicate-callback tests to rcutorture Josh Triplett
2013-08-19  3:55     ` Paul E. McKenney
2013-08-19  4:19       ` Josh Triplett
2013-08-19 16:09         ` Paul E. McKenney
2013-08-19 17:16           ` Josh Triplett
2013-08-20  2:05             ` Paul E. McKenney
2013-08-20  3:20               ` Josh Triplett [this message]
2013-08-18  2:59 ` [PATCH tip/core/rcu 0/5] rcutorture updates for 3.12 Josh Triplett
2013-08-20  2:51 ` [PATCH tip/core/rcu 1/5] rcu: Add duplicate-callback tests to rcutorture Paul E. McKenney
2013-08-20  2:51   ` [PATCH tip/core/rcu 2/5] rcu: Increase rcutorture test coverage Paul E. McKenney
2013-08-20  2:51   ` [PATCH tip/core/rcu 3/5] rcu: Sort rcutorture module parameters Paul E. McKenney
2013-08-20  2:51   ` [PATCH tip/core/rcu 4/5] rcu: Remove unused variable from rcu_torture_writer() Paul E. McKenney
2013-08-20  2:51   ` [PATCH tip/core/rcu 5/5] rcu: Make rcutorture emit online failures if verbose Paul E. McKenney
2013-08-20  3:24   ` [PATCH tip/core/rcu 1/5] rcu: Add duplicate-callback tests to rcutorture Josh Triplett
2013-08-20 10:02   ` Lai Jiangshan
2013-08-20 18:38     ` Paul E. McKenney
2013-08-21  2:40       ` Lai Jiangshan
2013-08-21  3:03         ` Paul E. McKenney
2013-08-24 19:25       ` Mathieu Desnoyers
2013-08-25 19:34         ` 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=20130820032014.GA4416@leaf \
    --to=josh@joshtriplett.org \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=davidlohr.bueso@hp.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=riel@surriel.com \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --cc=sedat.dilek@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /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.