All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@us.ibm.com>
To: Josh Triplett <josht@us.ibm.com>
Cc: linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>,
	Dipankar Sarma <dipankar@in.ibm.com>
Subject: Re: [PATCH 1/4] rcu: Refactor srcu_torture_deferred_free to work for any implementation
Date: Thu, 31 Aug 2006 18:29:27 -0700	[thread overview]
Message-ID: <20060901012926.GD4927@us.ibm.com> (raw)
In-Reply-To: <1157065012.25808.5.camel@josh-work.beaverton.ibm.com>

On Thu, Aug 31, 2006 at 03:56:52PM -0700, Josh Triplett wrote:
> Make srcu_torture_deferred_free use cur_ops->sync() so it will work for any
> implementation.  Move and rename it in preparation for use in the ops of other
> implementations.

Acked-by: Paul E. McKenney <paulmck@us.ibm.com>

> Signed-off-by: Josh Triplett <josh@freedesktop.org>
> ---
>  kernel/rcutorture.c |   53 ++++++++++++++++++++++++++++-----------------------
>  1 files changed, 29 insertions(+), 24 deletions(-)
> 
> diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
> index e045021..6e2f0a8 100644
> --- a/kernel/rcutorture.c
> +++ b/kernel/rcutorture.c
> @@ -117,6 +117,7 @@ static atomic_t n_rcu_torture_alloc_fail
>  static atomic_t n_rcu_torture_free;
>  static atomic_t n_rcu_torture_mberror;
>  static atomic_t n_rcu_torture_error;
> +static struct list_head rcu_torture_removed;
>  
>  /*
>   * Allocate an element from the rcu_tortures pool.
> @@ -270,6 +271,32 @@ static struct rcu_torture_ops rcu_ops = 
>  	.name = "rcu"
>  };
>  
> +static void rcu_sync_torture_deferred_free(struct rcu_torture *p)
> +{
> +	int i;
> +	struct rcu_torture *rp;
> +	struct rcu_torture *rp1;
> +
> +	cur_ops->sync();
> +	list_add(&p->rtort_free, &rcu_torture_removed);
> +	list_for_each_entry_safe(rp, rp1, &rcu_torture_removed, rtort_free) {
> +		i = rp->rtort_pipe_count;
> +		if (i > RCU_TORTURE_PIPE_LEN)
> +			i = RCU_TORTURE_PIPE_LEN;
> +		atomic_inc(&rcu_torture_wcount[i]);
> +		if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
> +			rp->rtort_mbtest = 0;
> +			list_del(&rp->rtort_free);
> +			rcu_torture_free(rp);
> +		}
> +	}
> +}
> +
> +static void rcu_sync_torture_init(void)
> +{
> +	INIT_LIST_HEAD(&rcu_torture_removed);
> +}
> +
>  /*
>   * Definitions for rcu_bh torture testing.
>   */
> @@ -335,12 +362,11 @@ static struct rcu_torture_ops rcu_bh_ops
>   */
>  
>  static struct srcu_struct srcu_ctl;
> -static struct list_head srcu_removed;
>  
>  static void srcu_torture_init(void)
>  {
>  	init_srcu_struct(&srcu_ctl);
> -	INIT_LIST_HEAD(&srcu_removed);
> +	rcu_sync_torture_init();
>  }
>  
>  static void srcu_torture_cleanup(void)
> @@ -377,27 +403,6 @@ static int srcu_torture_completed(void)
>  	return srcu_batches_completed(&srcu_ctl);
>  }
>  
> -static void srcu_torture_deferred_free(struct rcu_torture *p)
> -{
> -	int i;
> -	struct rcu_torture *rp;
> -	struct rcu_torture *rp1;
> -
> -	synchronize_srcu(&srcu_ctl);
> -	list_add(&p->rtort_free, &srcu_removed);
> -	list_for_each_entry_safe(rp, rp1, &srcu_removed, rtort_free) {
> -		i = rp->rtort_pipe_count;
> -		if (i > RCU_TORTURE_PIPE_LEN)
> -			i = RCU_TORTURE_PIPE_LEN;
> -		atomic_inc(&rcu_torture_wcount[i]);
> -		if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
> -			rp->rtort_mbtest = 0;
> -			list_del(&rp->rtort_free);
> -			rcu_torture_free(rp);
> -		}
> -	}
> -}
> -
>  static void srcu_torture_synchronize(void)
>  {
>  	synchronize_srcu(&srcu_ctl);
> @@ -427,7 +432,7 @@ static struct rcu_torture_ops srcu_ops =
>  	.readdelay = srcu_read_delay,
>  	.readunlock = srcu_torture_read_unlock,
>  	.completed = srcu_torture_completed,
> -	.deferredfree = srcu_torture_deferred_free,
> +	.deferredfree = rcu_sync_torture_deferred_free,
>  	.sync = srcu_torture_synchronize,
>  	.stats = srcu_torture_stats,
>  	.name = "srcu"
> -- 
> 1.4.1.1
> 
> 

      reply	other threads:[~2006-09-01  1:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-31 22:56 [PATCH 1/4] rcu: Refactor srcu_torture_deferred_free to work for any implementation Josh Triplett
2006-09-01  1:29 ` Paul E. McKenney [this message]

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=20060901012926.GD4927@us.ibm.com \
    --to=paulmck@us.ibm.com \
    --cc=akpm@osdl.org \
    --cc=dipankar@in.ibm.com \
    --cc=josht@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.