| From 135bd1a230bb69a68c9808a7d25467318900b80a Mon Sep 17 00:00:00 2001 |
| From: Neeraj Upadhyay <neeraju@codeaurora.org> |
| Date: Mon, 7 Aug 2017 11:20:10 +0530 |
| Subject: rcu: Fix up pending cbs check in rcu_prepare_for_idle |
| |
| From: Neeraj Upadhyay <neeraju@codeaurora.org> |
| |
| commit 135bd1a230bb69a68c9808a7d25467318900b80a upstream. |
| |
| The pending-callbacks check in rcu_prepare_for_idle() is backwards. |
| It should accelerate if there are pending callbacks, but the check |
| rather uselessly accelerates only if there are no callbacks. This commit |
| therefore inverts this check. |
| |
| Fixes: 15fecf89e46a ("srcu: Abstract multi-tail callback list handling") |
| Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org> |
| Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/rcu/tree_plugin.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/kernel/rcu/tree_plugin.h |
| +++ b/kernel/rcu/tree_plugin.h |
| @@ -1507,7 +1507,7 @@ static void rcu_prepare_for_idle(void) |
| rdtp->last_accelerate = jiffies; |
| for_each_rcu_flavor(rsp) { |
| rdp = this_cpu_ptr(rsp->rda); |
| - if (rcu_segcblist_pend_cbs(&rdp->cblist)) |
| + if (!rcu_segcblist_pend_cbs(&rdp->cblist)) |
| continue; |
| rnp = rdp->mynode; |
| raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ |