All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, Valdis.Kletnieks@vt.edu,
	dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com,
	fweisbec@gmail.com, sbw@mit.edu, patches@linaro.org
Subject: Re: [PATCH tip/core/urgent] rcu: Stop rcu_do_batch() from multiplexing the "count" variable
Date: Fri, 22 Jun 2012 12:52:13 -0700	[thread overview]
Message-ID: <20120622195213.GA18467@leaf> (raw)
In-Reply-To: <20120622153738.GA6800@linux.vnet.ibm.com>

On Fri, Jun 22, 2012 at 08:37:38AM -0700, Paul E. McKenney wrote:
> Commit b1420f1c (Make rcu_barrier() less disruptive) rearranged the
> code in rcu_do_batch(), moving the ->qlen manipulation to follow
> the requeueing of the callbacks.  Unfortunately, this rearrangement
> clobbered the value of the "count" local variable before the value
> of rdp->qlen was adjusted, resulting in the value of rdp->qlen being
> inaccurate.  This commit therefore introduces an index variable "i",
> avoiding the inadvertent multiplexing.
> 
> Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

Reviewed-by: Josh Triplett <josh@joshtriplett.org>

> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> index 2f34d02..2001d38 100644
> --- a/kernel/rcutree.c
> +++ b/kernel/rcutree.c
> @@ -1593,7 +1593,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
>  {
>  	unsigned long flags;
>  	struct rcu_head *next, *list, **tail;
> -	int bl, count, count_lazy;
> +	int bl, count, count_lazy, i;
>  
>  	/* If no callbacks are ready, just return.*/
>  	if (!cpu_has_callbacks_ready_to_invoke(rdp)) {
> @@ -1616,9 +1616,9 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
>  	rdp->nxtlist = *rdp->nxttail[RCU_DONE_TAIL];
>  	*rdp->nxttail[RCU_DONE_TAIL] = NULL;
>  	tail = rdp->nxttail[RCU_DONE_TAIL];
> -	for (count = RCU_NEXT_SIZE - 1; count >= 0; count--)
> -		if (rdp->nxttail[count] == rdp->nxttail[RCU_DONE_TAIL])
> -			rdp->nxttail[count] = &rdp->nxtlist;
> +	for (i = RCU_NEXT_SIZE - 1; i >= 0; i--)
> +		if (rdp->nxttail[i] == rdp->nxttail[RCU_DONE_TAIL])
> +			rdp->nxttail[i] = &rdp->nxtlist;
>  	local_irq_restore(flags);
>  
>  	/* Invoke callbacks. */
> @@ -1646,9 +1646,9 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
>  	if (list != NULL) {
>  		*tail = rdp->nxtlist;
>  		rdp->nxtlist = list;
> -		for (count = 0; count < RCU_NEXT_SIZE; count++)
> -			if (&rdp->nxtlist == rdp->nxttail[count])
> -				rdp->nxttail[count] = tail;
> +		for (i = 0; i < RCU_NEXT_SIZE; i++)
> +			if (&rdp->nxtlist == rdp->nxttail[i])
> +				rdp->nxttail[i] = tail;
>  			else
>  				break;
>  	}
> 

      reply	other threads:[~2012-06-22 19:52 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-22 15:37 [PATCH tip/core/urgent] rcu: Stop rcu_do_batch() from multiplexing the "count" variable Paul E. McKenney
2012-06-22 19:52 ` Josh Triplett [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=20120622195213.GA18467@leaf \
    --to=josh@joshtriplett.org \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=eric.dumazet@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=patches@linaro.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --cc=tglx@linutronix.de \
    /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.