* [PATCH]rcu classic: update qlen when cpu offline
@ 2008-06-26 2:06 Lai Jiangshan
2008-06-26 14:13 ` Paul E. McKenney
0 siblings, 1 reply; 3+ messages in thread
From: Lai Jiangshan @ 2008-06-26 2:06 UTC (permalink / raw)
To: Andrew Morton, Paul E. McKenney; +Cc: Linux Kernel Mailing List
When callbacks are moved from offline cpu to this cpu,
the qlen field of this rdp should be updated.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index f4ffbd0..42aead6 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -373,6 +373,10 @@ static void __rcu_offline_cpu(struct rcu_data *this_rdp,
rcu_move_batch(this_rdp, rdp->donelist, rdp->donetail);
rcu_move_batch(this_rdp, rdp->curlist, rdp->curtail);
rcu_move_batch(this_rdp, rdp->nxtlist, rdp->nxttail);
+
+ local_irq_disable();
+ this_rdp->qlen += rdp->qlen;
+ local_irq_enable();
}
static void rcu_offline_cpu(int cpu)
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH]rcu classic: update qlen when cpu offline
2008-06-26 2:06 [PATCH]rcu classic: update qlen when cpu offline Lai Jiangshan
@ 2008-06-26 14:13 ` Paul E. McKenney
2008-07-13 21:13 ` Ingo Molnar
0 siblings, 1 reply; 3+ messages in thread
From: Paul E. McKenney @ 2008-06-26 14:13 UTC (permalink / raw)
To: Lai Jiangshan; +Cc: Andrew Morton, Linux Kernel Mailing List, mingo
On Thu, Jun 26, 2008 at 10:06:43AM +0800, Lai Jiangshan wrote:
>
> When callbacks are moved from offline cpu to this cpu,
> the qlen field of this rdp should be updated.
Good catch!!!
The effect of this bug would be for force_quiescent_state() to be invoked
when it should not and vice versa -- wasting cycles in the first case
and letting RCU callbacks remain piled up in the second case. The bug
is thus "benign" in that it does not result in premature grace-period
termination, but should of course be fixed nonetheless.
Preemption is disabled by the caller's get_cpu_var(), so we are guaranteed
to remain on the same CPU, as required. The local_irq_disable() is indeed
needed, otherwise, an interrupt might invoke call_rcu() or call_rcu_bh(),
which could cause that interrupt's increment of ->qlen to be lost.
So this patch looks correct to me. Good job, Jiangshan!!!
Ingo, would you be willing to add this patch to tip/core/rcu?
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
> index f4ffbd0..42aead6 100644
> --- a/kernel/rcuclassic.c
> +++ b/kernel/rcuclassic.c
> @@ -373,6 +373,10 @@ static void __rcu_offline_cpu(struct rcu_data *this_rdp,
> rcu_move_batch(this_rdp, rdp->donelist, rdp->donetail);
> rcu_move_batch(this_rdp, rdp->curlist, rdp->curtail);
> rcu_move_batch(this_rdp, rdp->nxtlist, rdp->nxttail);
> +
> + local_irq_disable();
> + this_rdp->qlen += rdp->qlen;
> + local_irq_enable();
> }
>
> static void rcu_offline_cpu(int cpu)
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH]rcu classic: update qlen when cpu offline
2008-06-26 14:13 ` Paul E. McKenney
@ 2008-07-13 21:13 ` Ingo Molnar
0 siblings, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2008-07-13 21:13 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: Lai Jiangshan, Andrew Morton, Linux Kernel Mailing List
* Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote:
> On Thu, Jun 26, 2008 at 10:06:43AM +0800, Lai Jiangshan wrote:
> >
> > When callbacks are moved from offline cpu to this cpu,
> > the qlen field of this rdp should be updated.
>
> Good catch!!!
>
> The effect of this bug would be for force_quiescent_state() to be invoked
> when it should not and vice versa -- wasting cycles in the first case
> and letting RCU callbacks remain piled up in the second case. The bug
> is thus "benign" in that it does not result in premature grace-period
> termination, but should of course be fixed nonetheless.
>
> Preemption is disabled by the caller's get_cpu_var(), so we are guaranteed
> to remain on the same CPU, as required. The local_irq_disable() is indeed
> needed, otherwise, an interrupt might invoke call_rcu() or call_rcu_bh(),
> which could cause that interrupt's increment of ->qlen to be lost.
>
> So this patch looks correct to me. Good job, Jiangshan!!!
>
> Ingo, would you be willing to add this patch to tip/core/rcu?
>
> Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
thanks, applied to tip/core/rcu. (sorry about the delay!)
Ingo
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-07-13 21:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-26 2:06 [PATCH]rcu classic: update qlen when cpu offline Lai Jiangshan
2008-06-26 14:13 ` Paul E. McKenney
2008-07-13 21:13 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox