diff options
author | Paul E. McKenney <paulmck@us.ibm.com> | 2006-06-27 11:54:04 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-28 02:32:40 +0200 |
commit | c32e066057fe0914da262c94e52cefb142f965b4 (patch) | |
tree | c429649e39af7925a443c72f180349a451c7acbe /kernel/rcutorture.c | |
parent | [PATCH] rcutorture: add ops vector and Classic RCU ops (diff) | |
download | linux-c32e066057fe0914da262c94e52cefb142f965b4.tar.xz linux-c32e066057fe0914da262c94e52cefb142f965b4.zip |
[PATCH] rcutorture: add call_rcu_bh() operations
Add operations for the call_rcu_bh() variant of RCU. Also add an
rcu_batches_completed_bh() function, which is needed by rcutorture.
Signed-off-by: Paul E. McKenney <paulmck@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/rcutorture.c')
-rw-r--r-- | kernel/rcutorture.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index c96b5edd6ed1..4d1c3d247127 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c @@ -66,7 +66,7 @@ MODULE_PARM_DESC(test_no_idle_hz, "Test support for tickless idle CPUs"); module_param(shuffle_interval, int, 0); MODULE_PARM_DESC(shuffle_interval, "Number of seconds between shuffles"); module_param(torture_type, charp, 0); -MODULE_PARM_DESC(torture_type, "Type of RCU to torture (rcu)"); +MODULE_PARM_DESC(torture_type, "Type of RCU to torture (rcu, rcu_bh)"); #define TORTURE_FLAG "-torture:" #define PRINTK_STRING(s) \ @@ -246,8 +246,44 @@ static struct rcu_torture_ops rcu_ops = { .name = "rcu" }; +/* + * Definitions for rcu_bh torture testing. + */ + +static int rcu_bh_torture_read_lock(void) +{ + rcu_read_lock_bh(); + return 0; +} + +static void rcu_bh_torture_read_unlock(int idx) +{ + rcu_read_unlock_bh(); +} + +static int rcu_bh_torture_completed(void) +{ + return rcu_batches_completed_bh(); +} + +static void rcu_bh_torture_deferred_free(struct rcu_torture *p) +{ + call_rcu_bh(&p->rtort_rcu, rcu_torture_cb); +} + +static struct rcu_torture_ops rcu_bh_ops = { + .init = NULL, + .cleanup = NULL, + .readlock = rcu_bh_torture_read_lock, + .readunlock = rcu_bh_torture_read_unlock, + .completed = rcu_bh_torture_completed, + .deferredfree = rcu_bh_torture_deferred_free, + .stats = NULL, + .name = "rcu_bh" +}; + static struct rcu_torture_ops *torture_ops[] = - { &rcu_ops, NULL }; + { &rcu_ops, &rcu_bh_ops, NULL }; /* * RCU torture writer kthread. Repeatedly substitutes a new structure |