rcutorture: Output number of elapsed grace periods
authorJoel Fernandes (Google) <joel@joelfernandes.org>
Thu, 18 Jun 2020 20:29:55 +0000 (16:29 -0400)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 25 Aug 2020 01:45:31 +0000 (18:45 -0700)
This commit adds code to print the grace-period number at the start
of the test along with both the grace-period number and the number of
elapsed grace periods at the end of the test.  Note that variants of
RCU)without the notion of a grace-period number (for example, Tiny RCU)
just print zeroes.

[ paulmck: Adjust commit log. ]
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/rcutorture.c

index db37861..c8206ff 100644 (file)
@@ -172,6 +172,7 @@ static long n_barrier_successes; /* did rcu_barrier test succeed? */
 static unsigned long n_read_exits;
 static struct list_head rcu_torture_removed;
 static unsigned long shutdown_jiffies;
+static unsigned long start_gp_seq;
 
 static int rcu_torture_writer_state;
 #define RTWS_FIXED_DELAY       0
@@ -2469,8 +2470,9 @@ rcu_torture_cleanup(void)
 
        rcutorture_get_gp_data(cur_ops->ttype, &flags, &gp_seq);
        srcutorture_get_gp_data(cur_ops->ttype, srcu_ctlp, &flags, &gp_seq);
-       pr_alert("%s:  End-test grace-period state: g%lu f%#x\n",
-                cur_ops->name, gp_seq, flags);
+       pr_alert("%s:  End-test grace-period state: g%ld f%#x total-gps=%ld\n",
+                cur_ops->name, (long)gp_seq, flags,
+                rcutorture_seq_diff(gp_seq, start_gp_seq));
        torture_stop_kthread(rcu_torture_stats, stats_task);
        torture_stop_kthread(rcu_torture_fqs, fqs_task);
        if (rcu_torture_can_boost())
@@ -2594,6 +2596,8 @@ rcu_torture_init(void)
        long i;
        int cpu;
        int firsterr = 0;
+       int flags = 0;
+       unsigned long gp_seq = 0;
        static struct rcu_torture_ops *torture_ops[] = {
                &rcu_ops, &rcu_busted_ops, &srcu_ops, &srcud_ops,
                &busted_srcud_ops, &tasks_ops, &tasks_rude_ops,
@@ -2636,6 +2640,11 @@ rcu_torture_init(void)
                        nrealreaders = 1;
        }
        rcu_torture_print_module_parms(cur_ops, "Start of test");
+       rcutorture_get_gp_data(cur_ops->ttype, &flags, &gp_seq);
+       srcutorture_get_gp_data(cur_ops->ttype, srcu_ctlp, &flags, &gp_seq);
+       start_gp_seq = gp_seq;
+       pr_alert("%s:  Start-test grace-period state: g%ld f%#x\n",
+                cur_ops->name, (long)gp_seq, flags);
 
        /* Set up the freelist. */