From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932068AbWFZTQo (ORCPT ); Mon, 26 Jun 2006 15:16:44 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932665AbWFZTQo (ORCPT ); Mon, 26 Jun 2006 15:16:44 -0400 Received: from e2.ny.us.ibm.com ([32.97.182.142]:32228 "EHLO e2.ny.us.ibm.com") by vger.kernel.org with ESMTP id S932068AbWFZTQn (ORCPT ); Mon, 26 Jun 2006 15:16:43 -0400 Date: Mon, 26 Jun 2006 12:17:15 -0700 From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: akpm@osdl.org, matthltc@us.ibm.com, dipankar@in.ibm.com, arjan@infradead.org, ioe-lkml@rameria.de, greg@kroah.com, pbadari@us.ibm.com, mrmacman_g4@mac.com, hugh@veritas.com, vatsa@in.ibm.com Subject: Re: [PATCH 0/3] rcutorture: add call_rcu_bh() operations Message-ID: <20060626191715.GA2261@us.ibm.com> Reply-To: paulmck@us.ibm.com References: <20060626184821.GA2091@us.ibm.com> <20060626185812.GC2141@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20060626185812.GC2141@us.ibm.com> User-Agent: Mutt/1.4.1i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org And that subject line should of course be: [PATCH 3/3] rcutorture: add call_rcu_bh() operations I guess I need to start using quilt or something... :-/ Thanx, Paul On Mon, Jun 26, 2006 at 11:58:12AM -0700, Paul E. McKenney wrote: > 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 > --- > > include/linux/rcupdate.h | 1 + > kernel/rcupdate.c | 10 ++++++++++ > kernel/rcutorture.c | 40 ++++++++++++++++++++++++++++++++++++++-- > 3 files changed, 49 insertions(+), 2 deletions(-) > > diff -urpNa -X dontdiff linux-2.6.17-tortureops/include/linux/rcupdate.h linux-2.6.17-torturercu_bh/include/linux/rcupdate.h > --- linux-2.6.17-tortureops/include/linux/rcupdate.h 2006-06-17 18:49:35.000000000 -0700 > +++ linux-2.6.17-torturercu_bh/include/linux/rcupdate.h 2006-06-23 22:45:12.000000000 -0700 > @@ -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 -urpNa -X dontdiff linux-2.6.17-tortureops/kernel/rcupdate.c linux-2.6.17-torturercu_bh/kernel/rcupdate.c > --- linux-2.6.17-tortureops/kernel/rcupdate.c 2006-06-17 18:49:35.000000000 -0700 > +++ linux-2.6.17-torturercu_bh/kernel/rcupdate.c 2006-06-23 22:40:09.000000000 -0700 > @@ -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)) > @@ -627,6 +636,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_FUTURE(call_rcu); /* WARNING: GPL-only in April 2006. */ > EXPORT_SYMBOL_GPL_FUTURE(call_rcu_bh); /* WARNING: GPL-only in April 2006. */ > EXPORT_SYMBOL_GPL(synchronize_rcu); > diff -urpNa -X dontdiff linux-2.6.17-tortureops/kernel/rcutorture.c linux-2.6.17-torturercu_bh/kernel/rcutorture.c > --- linux-2.6.17-tortureops/kernel/rcutorture.c 2006-06-24 11:51:47.000000000 -0700 > +++ linux-2.6.17-torturercu_bh/kernel/rcutorture.c 2006-06-24 11:52:08.000000000 -0700 > @@ -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