From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mathieu.desnoyers@polymtl.ca, mingo@elte.hu,
akpm@linux-foundation.org, hch@infradead.org, mmlnx@us.ibm.com,
dipankar@in.ibm.com, dsmith@redhat.com, rostedt@goodmis.org,
adrian.bunk@movial.fi, a.p.zijlstra@chello.nl, ego@in.ibm.com,
niv@us.ibm.com, dvhltc@us.ibm.com, rusty@au1.ibm.com,
jkenisto@linux.vnet.ibm.com, oleg@tv-sign.ru,
jamesclhuang@yahoo.com
Subject: Re: [PATCH 0/5] call_rcu_sched() series
Date: Mon, 21 Apr 2008 17:48:20 -0700 [thread overview]
Message-ID: <20080422004820.GD3693@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080422004454.GA3517@linux.vnet.ibm.com>
Add entry to rcu_torture_ops allowing the correct barrier function to
be used upon exit from rcutorture. Also add torture options for the
new call_rcu_sched() API.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
rcutorture.c | 34 +++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff -urpNa -X dontdiff linux-2.6.25-C3-rcu_barrier_sched/kernel/rcutorture.c linux-2.6.25-C4-rcutorture/kernel/rcutorture.c
--- linux-2.6.25-C3-rcu_barrier_sched/kernel/rcutorture.c 2008-04-16 19:49:44.000000000 -0700
+++ linux-2.6.25-C4-rcutorture/kernel/rcutorture.c 2008-04-21 12:08:51.000000000 -0700
@@ -191,6 +191,7 @@ struct rcu_torture_ops {
int (*completed)(void);
void (*deferredfree)(struct rcu_torture *p);
void (*sync)(void);
+ void (*cb_barrier)(void);
int (*stats)(char *page);
char *name;
};
@@ -264,6 +265,7 @@ static struct rcu_torture_ops rcu_ops =
.completed = rcu_torture_completed,
.deferredfree = rcu_torture_deferred_free,
.sync = synchronize_rcu,
+ .cb_barrier = rcu_barrier,
.stats = NULL,
.name = "rcu"
};
@@ -303,6 +305,7 @@ static struct rcu_torture_ops rcu_sync_o
.completed = rcu_torture_completed,
.deferredfree = rcu_sync_torture_deferred_free,
.sync = synchronize_rcu,
+ .cb_barrier = NULL,
.stats = NULL,
.name = "rcu_sync"
};
@@ -363,6 +366,7 @@ static struct rcu_torture_ops rcu_bh_ops
.completed = rcu_bh_torture_completed,
.deferredfree = rcu_bh_torture_deferred_free,
.sync = rcu_bh_torture_synchronize,
+ .cb_barrier = rcu_barrier_bh,
.stats = NULL,
.name = "rcu_bh"
};
@@ -376,6 +380,7 @@ static struct rcu_torture_ops rcu_bh_syn
.completed = rcu_bh_torture_completed,
.deferredfree = rcu_sync_torture_deferred_free,
.sync = rcu_bh_torture_synchronize,
+ .cb_barrier = NULL,
.stats = NULL,
.name = "rcu_bh_sync"
};
@@ -457,6 +462,7 @@ static struct rcu_torture_ops srcu_ops =
.completed = srcu_torture_completed,
.deferredfree = rcu_sync_torture_deferred_free,
.sync = srcu_torture_synchronize,
+ .cb_barrier = NULL,
.stats = srcu_torture_stats,
.name = "srcu"
};
@@ -481,6 +487,11 @@ static int sched_torture_completed(void)
return 0;
}
+static void rcu_sched_torture_deferred_free(struct rcu_torture *p)
+{
+ call_rcu_sched(&p->rtort_rcu, rcu_torture_cb);
+}
+
static void sched_torture_synchronize(void)
{
synchronize_sched();
@@ -493,12 +504,27 @@ static struct rcu_torture_ops sched_ops
.readdelay = rcu_read_delay, /* just reuse rcu's version. */
.readunlock = sched_torture_read_unlock,
.completed = sched_torture_completed,
- .deferredfree = rcu_sync_torture_deferred_free,
+ .deferredfree = rcu_sched_torture_deferred_free,
.sync = sched_torture_synchronize,
+ .cb_barrier = rcu_barrier_sched,
.stats = NULL,
.name = "sched"
};
+static struct rcu_torture_ops sched_ops_sync = {
+ .init = rcu_sync_torture_init,
+ .cleanup = NULL,
+ .readlock = sched_torture_read_lock,
+ .readdelay = rcu_read_delay, /* just reuse rcu's version. */
+ .readunlock = sched_torture_read_unlock,
+ .completed = sched_torture_completed,
+ .deferredfree = rcu_sync_torture_deferred_free,
+ .sync = sched_torture_synchronize,
+ .cb_barrier = NULL,
+ .stats = NULL,
+ .name = "sched_sync"
+};
+
/*
* RCU torture writer kthread. Repeatedly substitutes a new structure
* for that pointed to by rcu_torture_current, freeing the old structure
@@ -844,7 +870,9 @@ rcu_torture_cleanup(void)
stats_task = NULL;
/* Wait for all RCU callbacks to fire. */
- rcu_barrier();
+
+ if (cur_ops->cb_barrier != NULL)
+ cur_ops->cb_barrier();
rcu_torture_stats_print(); /* -After- the stats thread is stopped! */
@@ -864,7 +892,7 @@ rcu_torture_init(void)
int firsterr = 0;
static struct rcu_torture_ops *torture_ops[] =
{ &rcu_ops, &rcu_sync_ops, &rcu_bh_ops, &rcu_bh_sync_ops,
- &srcu_ops, &sched_ops, };
+ &srcu_ops, &sched_ops, &sched_ops_sync, };
/* Process args and tell the world that the torturer is on the job. */
for (i = 0; i < ARRAY_SIZE(torture_ops); i++) {
next prev parent reply other threads:[~2008-04-22 0:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-22 0:44 [PATCH 0/5] call_rcu_sched() series Paul E. McKenney
2008-04-22 0:45 ` Paul E. McKenney
2008-04-22 0:50 ` [PATCH 1/5] Add call_rcu_sched() Paul E. McKenney
2008-05-05 9:14 ` Gautham R Shenoy
2008-05-05 14:43 ` Paul E. McKenney
2008-04-22 0:46 ` [PATCH 2/5] Add memory barriers and comments to rcu_check_callbacks() Paul E. McKenney
2008-04-22 0:47 ` [PATCH 3/5] Add rcu_barrier_sched() and rcu_barrier_bh() Paul E. McKenney
2008-05-05 9:22 ` Gautham R Shenoy
2008-05-05 14:47 ` Paul E. McKenney
2008-05-05 17:42 ` Gautham R Shenoy
2008-05-06 5:37 ` Paul E. McKenney
2008-04-22 0:48 ` Paul E. McKenney [this message]
2008-04-22 0:51 ` [PATCH 0/5] call_rcu_sched() series Paul E. McKenney
2008-04-22 0:52 ` [PATCH 4/5] Add call_rcu_sched() and friends to rcutorture Paul E. McKenney
2008-04-22 0:49 ` [PATCH 5/5] 1Q08 RCU doc update, add call_rcu_sched() Paul E. McKenney
-- strict thread matches above, loose matches on Subject: below --
2008-04-14 3:58 [PATCH 0/5] call_rcu_sched() series Paul E. McKenney
2008-04-15 1:33 ` Andrew Morton
2008-04-15 1:45 ` Andrew Morton
2008-04-15 1:48 ` Andrew Morton
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=20080422004820.GD3693@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=adrian.bunk@movial.fi \
--cc=akpm@linux-foundation.org \
--cc=dipankar@in.ibm.com \
--cc=dsmith@redhat.com \
--cc=dvhltc@us.ibm.com \
--cc=ego@in.ibm.com \
--cc=hch@infradead.org \
--cc=jamesclhuang@yahoo.com \
--cc=jkenisto@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=mmlnx@us.ibm.com \
--cc=niv@us.ibm.com \
--cc=oleg@tv-sign.ru \
--cc=rostedt@goodmis.org \
--cc=rusty@au1.ibm.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.