The patch titled rcutorture: add call_rcu_bh() operations has been added to the -mm tree. Its filename is rcutorture-add-call_rcu_bh-operations.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: rcutorture: add call_rcu_bh() operations From: "Paul E. McKenney" <paulmck@xxxxxxxxxx> 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@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- include/linux/rcupdate.h | 1 kernel/rcupdate.c | 10 +++++++++ kernel/rcutorture.c | 40 +++++++++++++++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 2 deletions(-) diff -puN include/linux/rcupdate.h~rcutorture-add-call_rcu_bh-operations include/linux/rcupdate.h --- a/include/linux/rcupdate.h~rcutorture-add-call_rcu_bh-operations +++ a/include/linux/rcupdate.h @@ -258,6 +258,7 @@ extern void rcu_init(void); extern void rcu_check_callbacks(int cpu, int user); extern void rcu_restart_cpu(int cpu); extern long rcu_batches_completed(void); +extern long rcu_batches_completed_bh(void); /* Exported interfaces */ extern void FASTCALL(call_rcu(struct rcu_head *head, diff -puN kernel/rcupdate.c~rcutorture-add-call_rcu_bh-operations kernel/rcupdate.c --- a/kernel/rcupdate.c~rcutorture-add-call_rcu_bh-operations +++ a/kernel/rcupdate.c @@ -182,6 +182,15 @@ long rcu_batches_completed(void) return rcu_ctrlblk.completed; } +/* + * Return the number of RCU batches processed thus far. Useful + * for debug and statistics. + */ +long rcu_batches_completed_bh(void) +{ + return rcu_bh_ctrlblk.completed; +} + static void rcu_barrier_callback(struct rcu_head *notused) { if (atomic_dec_and_test(&rcu_barrier_cpu_count)) @@ -619,6 +628,7 @@ module_param(qlowmark, int, 0); module_param(rsinterval, int, 0); #endif EXPORT_SYMBOL_GPL(rcu_batches_completed); +EXPORT_SYMBOL_GPL(rcu_batches_completed_bh); EXPORT_SYMBOL_GPL(call_rcu); EXPORT_SYMBOL_GPL(call_rcu_bh); EXPORT_SYMBOL_GPL(synchronize_rcu); diff -puN kernel/rcutorture.c~rcutorture-add-call_rcu_bh-operations kernel/rcutorture.c --- a/kernel/rcutorture.c~rcutorture-add-call_rcu_bh-operations +++ a/kernel/rcutorture.c @@ -66,7 +66,7 @@ MODULE_PARM_DESC(test_no_idle_hz, "Test 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 _ Patches currently in -mm which might be from paulmck@xxxxxxxxxx are origin.patch radix-tree-rcu-lockless-readside.patch adix-tree-rcu-lockless-readside-update.patch rcutorture-catchup-doc-fixes-for-idle-hz-tests.patch rcutorture-add-ops-vector-and-classic-rcu-ops.patch rcutorture-add-call_rcu_bh-operations.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html