diff mbox

[tip/core/rcu,3/6] rcu: Test srcu_barrier() from rcutorture test suite

Message ID 1339786674-25265-3-git-send-email-paulmck@linux.vnet.ibm.com
State Accepted
Commit e3f8d3788ed7cf55946030dc9b76e73edb111602
Headers show

Commit Message

Paul E. McKenney June 15, 2012, 6:57 p.m. UTC
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

SRCU now has a call_srcu() and an srcu_barrier(), but rcutorture does
not test srcu_barrier().  This commit adds the machinery to allow
rcutorture's existing rcu_barrier() tests to apply to SRCU.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 kernel/rcutorture.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

Comments

Josh Triplett June 15, 2012, 8:25 p.m. UTC | #1
On Fri, Jun 15, 2012 at 11:57:51AM -0700, Paul E. McKenney wrote:
> From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> 
> SRCU now has a call_srcu() and an srcu_barrier(), but rcutorture does
> not test srcu_barrier().  This commit adds the machinery to allow
> rcutorture's existing rcu_barrier() tests to apply to SRCU.
> 
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

This commit message suggests that the commit only adds support for
testing srcu_barrier, but it adds both call_srcu and srcu_barrier.  You
might want to wordsmith it a bit:

SRCU now has a call_srcu() and an srcu_barrier(), but rcutorture does
not test them.  This commit adds the machinery to allow rcutorture's
existing tests for call_rcu() and rcu_barrier() to apply to the SRCU
equivalents.

With that change:

Reviewed-by: Josh Triplett <josh@joshtriplett.org>

> ---
>  kernel/rcutorture.c |   15 +++++++++++++--
>  1 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
> index 9850479..7b6935e 100644
> --- a/kernel/rcutorture.c
> +++ b/kernel/rcutorture.c
> @@ -635,6 +635,17 @@ static void srcu_torture_synchronize(void)
>  	synchronize_srcu(&srcu_ctl);
>  }
>  
> +static void srcu_torture_call(struct rcu_head *head,
> +			      void (*func)(struct rcu_head *head))
> +{
> +	call_srcu(&srcu_ctl, head, func);
> +}
> +
> +static void srcu_torture_barrier(void)
> +{
> +	srcu_barrier(&srcu_ctl);
> +}
> +
>  static int srcu_torture_stats(char *page)
>  {
>  	int cnt = 0;
> @@ -661,8 +672,8 @@ static struct rcu_torture_ops srcu_ops = {
>  	.completed	= srcu_torture_completed,
>  	.deferred_free	= srcu_torture_deferred_free,
>  	.sync		= srcu_torture_synchronize,
> -	.call		= NULL,
> -	.cb_barrier	= NULL,
> +	.call		= srcu_torture_call,
> +	.cb_barrier	= srcu_torture_barrier,
>  	.stats		= srcu_torture_stats,
>  	.name		= "srcu"
>  };
> -- 
> 1.7.8
>
diff mbox

Patch

diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
index 9850479..7b6935e 100644
--- a/kernel/rcutorture.c
+++ b/kernel/rcutorture.c
@@ -635,6 +635,17 @@  static void srcu_torture_synchronize(void)
 	synchronize_srcu(&srcu_ctl);
 }
 
+static void srcu_torture_call(struct rcu_head *head,
+			      void (*func)(struct rcu_head *head))
+{
+	call_srcu(&srcu_ctl, head, func);
+}
+
+static void srcu_torture_barrier(void)
+{
+	srcu_barrier(&srcu_ctl);
+}
+
 static int srcu_torture_stats(char *page)
 {
 	int cnt = 0;
@@ -661,8 +672,8 @@  static struct rcu_torture_ops srcu_ops = {
 	.completed	= srcu_torture_completed,
 	.deferred_free	= srcu_torture_deferred_free,
 	.sync		= srcu_torture_synchronize,
-	.call		= NULL,
-	.cb_barrier	= NULL,
+	.call		= srcu_torture_call,
+	.cb_barrier	= srcu_torture_barrier,
 	.stats		= srcu_torture_stats,
 	.name		= "srcu"
 };