]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
rcu: Fix up pending cbs check in rcu_prepare_for_idle
authorNeeraj Upadhyay <neeraju@codeaurora.org>
Mon, 7 Aug 2017 05:50:10 +0000 (11:20 +0530)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 14 Mar 2018 10:41:54 +0000 (11:41 +0100)
BugLink: http://bugs.launchpad.net/bugs/1744213
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>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
kernel/rcu/tree_plugin.h

index 908b309d60d7bc29e82f3a049d928fbd8140dfd2..b8f51dffeae9f94aa93e3dfbda0c249c288e5cde 100644 (file)
@@ -1493,7 +1493,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. */