]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
rcu: Separate accounting of callbacks from callback-free CPUs
authorPaul E. McKenney <paul.mckenney@linaro.org>
Mon, 29 Oct 2012 14:29:20 +0000 (07:29 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 16 Nov 2012 18:05:57 +0000 (10:05 -0800)
Currently, callback invocations from callback-free CPUs are accounted to
the CPU that registered the callback, but using the same field that is
used for normal callbacks.  This makes it impossible to determine from
debugfs output whether callbacks are in fact being diverted.  This commit
therefore adds a separate ->n_nocbs_invoked field in the rcu_data structure
in which diverted callback invocations are counted.  RCU's debugfs tracing
still displays normal callback invocations using ci=, but displayed
diverted callbacks with nci=.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree.h
kernel/rcutree_plugin.h
kernel/rcutree_trace.c

index 488f2ec6b663917f8570a4df82236133d44990d7..4b69291b093d7157d638da01d342c2ee3d1f2d16 100644 (file)
@@ -287,6 +287,7 @@ struct rcu_data {
        long            qlen_last_fqs_check;
                                        /* qlen at last check for QS forcing */
        unsigned long   n_cbs_invoked;  /* count of RCU cbs invoked. */
+       unsigned long   n_nocbs_invoked; /* count of no-CBs RCU cbs invoked. */
        unsigned long   n_cbs_orphaned; /* RCU cbs orphaned by dying CPU */
        unsigned long   n_cbs_adopted;  /* RCU cbs adopted from dying CPU */
        unsigned long   n_force_qs_snap;
index 6cdc372de34c41e181b16d9c48cdaa6745840f9b..f6e5ec2932b4aed0ff40016e8fdf77e5b9c1f366 100644 (file)
@@ -2406,7 +2406,7 @@ static int rcu_nocb_kthread(void *arg)
                trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1);
                ACCESS_ONCE(rdp->nocb_p_count) -= c;
                ACCESS_ONCE(rdp->nocb_p_count_lazy) -= cl;
-               rdp->n_cbs_invoked += c;
+               rdp->n_nocbs_invoked += c;
        }
        return 0;
 }
index 3189f9aa3e84a2fa6ba7f0bae95138c3daf50ac4..0d095dcaa6708b8517153bf604cf70762ea28323 100644 (file)
@@ -148,8 +148,9 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
                   per_cpu(rcu_cpu_kthread_loops, rdp->cpu) & 0xffff);
 #endif /* #ifdef CONFIG_RCU_BOOST */
        seq_printf(m, " b=%ld", rdp->blimit);
-       seq_printf(m, " ci=%lu co=%lu ca=%lu\n",
-                  rdp->n_cbs_invoked, rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
+       seq_printf(m, " ci=%lu nci=%lu co=%lu ca=%lu\n",
+                  rdp->n_cbs_invoked, rdp->n_nocbs_invoked,
+                  rdp->n_cbs_orphaned, rdp->n_cbs_adopted);
 }
 
 static int show_rcudata(struct seq_file *m, void *v)