* [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup
@ 2009-10-28 15:14 Paul E. McKenney
2009-10-28 15:14 ` [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Paul E. McKenney
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Paul E. McKenney @ 2009-10-28 15:14 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc,
niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells
This patch series contains a cleanup and a fix:
o Code cleanup from Lai Jiangshan that makes the calls to
rcu_irq_enter() and rcu_irq_exit() more obviously correct.
The previous code worked because rcu_irq_exit() is always
an empty function if !NO_HZ.
o Fix a low-probability race in the TREE_RCU infrastructure
that can be triggered by extremely long grace periods.
Thanx, Paul
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls 2009-10-28 15:14 [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Paul E. McKenney @ 2009-10-28 15:14 ` Paul E. McKenney 2009-11-02 16:18 ` [tip:core/rcu] rcu: Cleanup: " tip-bot for Lai Jiangshan 2009-10-28 15:14 ` [PATCH tip/core/rcu 2/2] rcu: fix long-grace-period race between forcing and initialization Paul E. McKenney 2009-10-29 9:05 ` [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Ingo Molnar 2 siblings, 1 reply; 7+ messages in thread From: Paul E. McKenney @ 2009-10-28 15:14 UTC (permalink / raw) To: linux-kernel Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc, niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells, Paul E. McKenney From: Lai Jiangshan <laijs@cn.fujitsu.com> Currently, rcu_irq_exit() is invoked only for CONFIG_NO_HZ, while rcu_irq_enter() is invoked unconditionally. This patch moves rcu_irq_exit() out from under CONFIG_NO_HZ so that the calls are balanced. This patch has no effect on the behavior of the kernel because both rcu_irq_enter() and rcu_irq_exit() are empty for !CONFIG_NO_HZ, but the code is easier to understand if the calls are obviously balanced in all cases. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> --- kernel/softirq.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index f8749e5..21939d9 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -302,9 +302,9 @@ void irq_exit(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); + rcu_irq_exit(); #ifdef CONFIG_NO_HZ /* Make sure that timer wheel updates are propagated */ - rcu_irq_exit(); if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched()) tick_nohz_stop_sched_tick(0); #endif -- 1.5.2.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [tip:core/rcu] rcu: Cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls 2009-10-28 15:14 ` [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Paul E. McKenney @ 2009-11-02 16:18 ` tip-bot for Lai Jiangshan 0 siblings, 0 replies; 7+ messages in thread From: tip-bot for Lai Jiangshan @ 2009-11-02 16:18 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, paulmck, hpa, mingo, tglx, laijs, mingo Commit-ID: c5e0cb3ddc5f14cedcfc50c0fb3b5fc6b56576da Gitweb: http://git.kernel.org/tip/c5e0cb3ddc5f14cedcfc50c0fb3b5fc6b56576da Author: Lai Jiangshan <laijs@cn.fujitsu.com> AuthorDate: Wed, 28 Oct 2009 08:14:48 -0700 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Mon, 2 Nov 2009 16:06:37 +0100 rcu: Cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Currently, rcu_irq_exit() is invoked only for CONFIG_NO_HZ, while rcu_irq_enter() is invoked unconditionally. This patch moves rcu_irq_exit() out from under CONFIG_NO_HZ so that the calls are balanced. This patch has no effect on the behavior of the kernel because both rcu_irq_enter() and rcu_irq_exit() are empty for !CONFIG_NO_HZ, but the code is easier to understand if the calls are obviously balanced in all cases. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com LKML-Reference: <12567428891605-git-send-email-> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- kernel/softirq.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/softirq.c b/kernel/softirq.c index f8749e5..21939d9 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -302,9 +302,9 @@ void irq_exit(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); + rcu_irq_exit(); #ifdef CONFIG_NO_HZ /* Make sure that timer wheel updates are propagated */ - rcu_irq_exit(); if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched()) tick_nohz_stop_sched_tick(0); #endif ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH tip/core/rcu 2/2] rcu: fix long-grace-period race between forcing and initialization 2009-10-28 15:14 [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Paul E. McKenney 2009-10-28 15:14 ` [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Paul E. McKenney @ 2009-10-28 15:14 ` Paul E. McKenney 2009-11-02 16:18 ` [tip:core/urgent] rcu: Fix " tip-bot for Paul E. McKenney 2009-10-29 9:05 ` [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Ingo Molnar 2 siblings, 1 reply; 7+ messages in thread From: Paul E. McKenney @ 2009-10-28 15:14 UTC (permalink / raw) To: linux-kernel Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc, niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells, Paul E. McKenney From: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Very long RCU read-side critical sections (50 milliseconds or so) can cause a race between force_quiescent_state() and rcu_start_gp() as follows on kernel builds with multi-level rcu_node hierarchies: 1. CPU 0 calls force_quiescent_state(), sees that there is a grace period in progress, and acquires ->fsqlock. 2. CPU 1 detects the end of the grace period, and so cpu_quiet_msk_finish() sets rsp->completed to rsp->gpnum. This operation is carried out under the root rnp->lock, but CPU 0 has not yet acquired that lock. Note that rsp->signaled is still RCU_SAVE_DYNTICK from the last grace period. 3. CPU 1 calls rcu_start_gp(), but no one wants a new grace period, so it drops the root rnp->lock and returns. 4. CPU 0 acquires the root rnp->lock and picks up rsp->completed and rsp->signaled, then drops rnp->lock. It then enters the RCU_SAVE_DYNTICK leg of the switch statement. 5. CPU 2 invokes call_rcu(), and now needs a new grace period. It calls rcu_start_gp(), which acquires the root rnp->lock, sets rsp->signaled to RCU_GP_INIT (too bad that CPU 0 is already in the RCU_SAVE_DYNTICK leg of the switch statement!) and starts initializing the rcu_node hierarchy. If there are multiple levels to the hierarchy, it will drop the root rnp->lock and initialize the lower levels of the hierarchy. 6. CPU 0 notes that rsp->completed has not changed, which permits both CPU 2 and CPU 0 to try updating it concurrently. If CPU 0's update prevails, later calls to force_quiescent_state() can count old quiescent states against the new grace period, which can in turn result in premature ending of grace periods. Not good. This patch adds an RCU_GP_IDLE state for rsp->signaled that is set initially at boot time and any time a grace period ends. This prevents CPU 0 from getting into the workings of force_quiescent_state() in step 4. Additional locking and checks prevent the concurrent update of rsp->signaled in step 6. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> --- kernel/rcutree.c | 16 +++++++++++----- kernel/rcutree.h | 7 ++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 055f1a9..0d9faee 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@ -61,7 +61,7 @@ static struct lock_class_key rcu_root_class; NUM_RCU_LVL_2, \ NUM_RCU_LVL_3, /* == MAX_RCU_LVLS */ \ }, \ - .signaled = RCU_SIGNAL_INIT, \ + .signaled = RCU_GP_IDLE, \ .gpnum = -300, \ .completed = -300, \ .onofflock = __SPIN_LOCK_UNLOCKED(&name.onofflock), \ @@ -659,14 +659,17 @@ rcu_start_gp(struct rcu_state *rsp, unsigned long flags) * irqs disabled. */ rcu_for_each_node_breadth_first(rsp, rnp) { - spin_lock(&rnp->lock); /* irqs already disabled. */ + spin_lock(&rnp->lock); /* irqs already disabled. */ rcu_preempt_check_blocked_tasks(rnp); rnp->qsmask = rnp->qsmaskinit; rnp->gpnum = rsp->gpnum; - spin_unlock(&rnp->lock); /* irqs already disabled. */ + spin_unlock(&rnp->lock); /* irqs remain disabled. */ } + rnp = rcu_get_root(rsp); + spin_lock(&rnp->lock); /* irqs already disabled. */ rsp->signaled = RCU_SIGNAL_INIT; /* force_quiescent_state now OK. */ + spin_unlock(&rnp->lock); /* irqs remain disabled. */ spin_unlock_irqrestore(&rsp->onofflock, flags); } @@ -708,6 +711,7 @@ static void cpu_quiet_msk_finish(struct rcu_state *rsp, unsigned long flags) { WARN_ON_ONCE(!rcu_gp_in_progress(rsp)); rsp->completed = rsp->gpnum; + rsp->signaled = RCU_GP_IDLE; rcu_process_gp_end(rsp, rsp->rda[smp_processor_id()]); rcu_start_gp(rsp, flags); /* releases root node's rnp->lock. */ } @@ -1151,9 +1155,10 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) } spin_unlock(&rnp->lock); switch (signaled) { + case RCU_GP_IDLE: case RCU_GP_INIT: - break; /* grace period still initializing, ignore. */ + break; /* grace period idle or initializing, ignore. */ case RCU_SAVE_DYNTICK: @@ -1167,7 +1172,8 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) /* Update state, record completion counter. */ spin_lock(&rnp->lock); - if (lastcomp == rsp->completed) { + if (lastcomp == rsp->completed && + rsp->signaled == RCU_SAVE_DYNTICK) { rsp->signaled = RCU_FORCE_QS; dyntick_record_completed(rsp, lastcomp); } diff --git a/kernel/rcutree.h b/kernel/rcutree.h index 599161f..e1bc649 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h @@ -201,9 +201,10 @@ struct rcu_data { }; /* Values for signaled field in struct rcu_state. */ -#define RCU_GP_INIT 0 /* Grace period being initialized. */ -#define RCU_SAVE_DYNTICK 1 /* Need to scan dyntick state. */ -#define RCU_FORCE_QS 2 /* Need to force quiescent state. */ +#define RCU_GP_IDLE 0 /* No grace period in progress. */ +#define RCU_GP_INIT 1 /* Grace period being initialized. */ +#define RCU_SAVE_DYNTICK 2 /* Need to scan dyntick state. */ +#define RCU_FORCE_QS 3 /* Need to force quiescent state. */ #ifdef CONFIG_NO_HZ #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK #else /* #ifdef CONFIG_NO_HZ */ -- 1.5.2.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [tip:core/urgent] rcu: Fix long-grace-period race between forcing and initialization 2009-10-28 15:14 ` [PATCH tip/core/rcu 2/2] rcu: fix long-grace-period race between forcing and initialization Paul E. McKenney @ 2009-11-02 16:18 ` tip-bot for Paul E. McKenney 0 siblings, 0 replies; 7+ messages in thread From: tip-bot for Paul E. McKenney @ 2009-11-02 16:18 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, paulmck, hpa, mingo, tglx, mingo Commit-ID: 83f5b01ffbbaea6f97c9a79d21e240dbfb69f2f1 Gitweb: http://git.kernel.org/tip/83f5b01ffbbaea6f97c9a79d21e240dbfb69f2f1 Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com> AuthorDate: Wed, 28 Oct 2009 08:14:49 -0700 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Mon, 2 Nov 2009 16:06:21 +0100 rcu: Fix long-grace-period race between forcing and initialization Very long RCU read-side critical sections (50 milliseconds or so) can cause a race between force_quiescent_state() and rcu_start_gp() as follows on kernel builds with multi-level rcu_node hierarchies: 1. CPU 0 calls force_quiescent_state(), sees that there is a grace period in progress, and acquires ->fsqlock. 2. CPU 1 detects the end of the grace period, and so cpu_quiet_msk_finish() sets rsp->completed to rsp->gpnum. This operation is carried out under the root rnp->lock, but CPU 0 has not yet acquired that lock. Note that rsp->signaled is still RCU_SAVE_DYNTICK from the last grace period. 3. CPU 1 calls rcu_start_gp(), but no one wants a new grace period, so it drops the root rnp->lock and returns. 4. CPU 0 acquires the root rnp->lock and picks up rsp->completed and rsp->signaled, then drops rnp->lock. It then enters the RCU_SAVE_DYNTICK leg of the switch statement. 5. CPU 2 invokes call_rcu(), and now needs a new grace period. It calls rcu_start_gp(), which acquires the root rnp->lock, sets rsp->signaled to RCU_GP_INIT (too bad that CPU 0 is already in the RCU_SAVE_DYNTICK leg of the switch statement!) and starts initializing the rcu_node hierarchy. If there are multiple levels to the hierarchy, it will drop the root rnp->lock and initialize the lower levels of the hierarchy. 6. CPU 0 notes that rsp->completed has not changed, which permits both CPU 2 and CPU 0 to try updating it concurrently. If CPU 0's update prevails, later calls to force_quiescent_state() can count old quiescent states against the new grace period, which can in turn result in premature ending of grace periods. Not good. This patch adds an RCU_GP_IDLE state for rsp->signaled that is set initially at boot time and any time a grace period ends. This prevents CPU 0 from getting into the workings of force_quiescent_state() in step 4. Additional locking and checks prevent the concurrent update of rsp->signaled in step 6. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com LKML-Reference: <1256742889199-git-send-email-> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- kernel/rcutree.c | 16 +++++++++++----- kernel/rcutree.h | 7 ++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 0536125..f3077c0 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@ -59,7 +59,7 @@ NUM_RCU_LVL_2, \ NUM_RCU_LVL_3, /* == MAX_RCU_LVLS */ \ }, \ - .signaled = RCU_SIGNAL_INIT, \ + .signaled = RCU_GP_IDLE, \ .gpnum = -300, \ .completed = -300, \ .onofflock = __SPIN_LOCK_UNLOCKED(&name.onofflock), \ @@ -657,14 +657,17 @@ rcu_start_gp(struct rcu_state *rsp, unsigned long flags) * irqs disabled. */ rcu_for_each_node_breadth_first(rsp, rnp) { - spin_lock(&rnp->lock); /* irqs already disabled. */ + spin_lock(&rnp->lock); /* irqs already disabled. */ rcu_preempt_check_blocked_tasks(rnp); rnp->qsmask = rnp->qsmaskinit; rnp->gpnum = rsp->gpnum; - spin_unlock(&rnp->lock); /* irqs already disabled. */ + spin_unlock(&rnp->lock); /* irqs remain disabled. */ } + rnp = rcu_get_root(rsp); + spin_lock(&rnp->lock); /* irqs already disabled. */ rsp->signaled = RCU_SIGNAL_INIT; /* force_quiescent_state now OK. */ + spin_unlock(&rnp->lock); /* irqs remain disabled. */ spin_unlock_irqrestore(&rsp->onofflock, flags); } @@ -706,6 +709,7 @@ static void cpu_quiet_msk_finish(struct rcu_state *rsp, unsigned long flags) { WARN_ON_ONCE(!rcu_gp_in_progress(rsp)); rsp->completed = rsp->gpnum; + rsp->signaled = RCU_GP_IDLE; rcu_process_gp_end(rsp, rsp->rda[smp_processor_id()]); rcu_start_gp(rsp, flags); /* releases root node's rnp->lock. */ } @@ -1162,9 +1166,10 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) } spin_unlock(&rnp->lock); switch (signaled) { + case RCU_GP_IDLE: case RCU_GP_INIT: - break; /* grace period still initializing, ignore. */ + break; /* grace period idle or initializing, ignore. */ case RCU_SAVE_DYNTICK: @@ -1178,7 +1183,8 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed) /* Update state, record completion counter. */ spin_lock(&rnp->lock); - if (lastcomp == rsp->completed) { + if (lastcomp == rsp->completed && + rsp->signaled == RCU_SAVE_DYNTICK) { rsp->signaled = RCU_FORCE_QS; dyntick_record_completed(rsp, lastcomp); } diff --git a/kernel/rcutree.h b/kernel/rcutree.h index 1823c6e..1899023 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h @@ -201,9 +201,10 @@ struct rcu_data { }; /* Values for signaled field in struct rcu_state. */ -#define RCU_GP_INIT 0 /* Grace period being initialized. */ -#define RCU_SAVE_DYNTICK 1 /* Need to scan dyntick state. */ -#define RCU_FORCE_QS 2 /* Need to force quiescent state. */ +#define RCU_GP_IDLE 0 /* No grace period in progress. */ +#define RCU_GP_INIT 1 /* Grace period being initialized. */ +#define RCU_SAVE_DYNTICK 2 /* Need to scan dyntick state. */ +#define RCU_FORCE_QS 3 /* Need to force quiescent state. */ #ifdef CONFIG_NO_HZ #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK #else /* #ifdef CONFIG_NO_HZ */ ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup 2009-10-28 15:14 [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Paul E. McKenney 2009-10-28 15:14 ` [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Paul E. McKenney 2009-10-28 15:14 ` [PATCH tip/core/rcu 2/2] rcu: fix long-grace-period race between forcing and initialization Paul E. McKenney @ 2009-10-29 9:05 ` Ingo Molnar 2009-10-29 14:10 ` Paul E. McKenney 2 siblings, 1 reply; 7+ messages in thread From: Ingo Molnar @ 2009-10-29 9:05 UTC (permalink / raw) To: Paul E. McKenney Cc: linux-kernel, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc, niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells * Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote: > This patch series contains a cleanup and a fix: > > o Code cleanup from Lai Jiangshan that makes the calls to > rcu_irq_enter() and rcu_irq_exit() more obviously correct. > The previous code worked because rcu_irq_exit() is always > an empty function if !NO_HZ. Can go via tip:core/rcu, agreed? > > o Fix a low-probability race in the TREE_RCU infrastructure > that can be triggered by extremely long grace periods. Should go via tip:core/urgent as it's a fix for .32, agreed? Ingo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup 2009-10-29 9:05 ` [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Ingo Molnar @ 2009-10-29 14:10 ` Paul E. McKenney 0 siblings, 0 replies; 7+ messages in thread From: Paul E. McKenney @ 2009-10-29 14:10 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc, niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells On Thu, Oct 29, 2009 at 10:05:37AM +0100, Ingo Molnar wrote: > > * Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote: > > > This patch series contains a cleanup and a fix: > > > > o Code cleanup from Lai Jiangshan that makes the calls to > > rcu_irq_enter() and rcu_irq_exit() more obviously correct. > > The previous code worked because rcu_irq_exit() is always > > an empty function if !NO_HZ. > > Can go via tip:core/rcu, agreed? Agreed. > > o Fix a low-probability race in the TREE_RCU infrastructure > > that can be triggered by extremely long grace periods. > > Should go via tip:core/urgent as it's a fix for .32, agreed? Also agreed. Thanx, Paul ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-11-02 16:19 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-10-28 15:14 [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Paul E. McKenney 2009-10-28 15:14 ` [PATCH tip/core/rcu 1/2] rcu: cleanup: balance rcu_irq_enter()/rcu_irq_exit() calls Paul E. McKenney 2009-11-02 16:18 ` [tip:core/rcu] rcu: Cleanup: " tip-bot for Lai Jiangshan 2009-10-28 15:14 ` [PATCH tip/core/rcu 2/2] rcu: fix long-grace-period race between forcing and initialization Paul E. McKenney 2009-11-02 16:18 ` [tip:core/urgent] rcu: Fix " tip-bot for Paul E. McKenney 2009-10-29 9:05 ` [PATCH tip/core/rcu 0/2] RCU force_quiescent_state() fix and dyntick cleanup Ingo Molnar 2009-10-29 14:10 ` Paul E. McKenney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox