Messages in this thread Patch in this message | | | From | "Paul E. McKenney" <> | Subject | [PATCH RFC tip/core/rcu 5/5] rcu: Limit expedited helping to every 10 ms or every 4th GP | Date | Tue, 30 Jun 2015 14:48:30 -0700 |
| |
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> --- kernel/rcu/tree.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 308b6acb4260..247aa1120c4c 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3505,10 +3505,19 @@ void synchronize_sched_expedited(void) !atomic_read(&rsp->expedited_need_qs)); rcu_exp_gp_seq_end(rsp); - mutex_unlock(&rnp->exp_funnel_mutex); smp_mb(); /* ensure subsequent action seen after grace period. */ - if (rsp->gp_kthread && rcu_gp_in_progress(rsp)) - wake_up(&rsp->gp_wq); + if (rsp->gp_kthread && rcu_gp_in_progress(rsp)) { + static unsigned long nextgp; + static unsigned long nextjiffy; + + if (time_after_eq(jiffies, nextgp) || + ULONG_CMP_GE(rsp->gpnum, nextgp)) { + nextgp = rsp->gpnum + 4; + nextjiffy = jiffies + 10; + wake_up(&rsp->gp_wq); + } + } + mutex_unlock(&rnp->exp_funnel_mutex); put_online_cpus(); } -- 1.8.1.5
| |