rcuperf: Add test for dynamically initialized srcu_struct
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 19 Apr 2017 20:43:21 +0000 (13:43 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 8 Jun 2017 15:25:28 +0000 (08:25 -0700)
This commit adds a perf_type of "srcud", which species that rcuperf
test SRCU on a dynamically initialized srcu_struct.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcu/rcuperf.c

index e1ce97bead944cdad76e7bb73903ddfa94995848..5158ddba67162ec0a44030cbeab0b0e6dd58a8de 100644 (file)
@@ -254,6 +254,35 @@ static struct rcu_perf_ops srcu_ops = {
        .name           = "srcu"
 };
 
+static struct srcu_struct srcud;
+
+static void srcu_sync_perf_init(void)
+{
+       srcu_ctlp = &srcud;
+       init_srcu_struct(srcu_ctlp);
+}
+
+static void srcu_sync_perf_cleanup(void)
+{
+       cleanup_srcu_struct(srcu_ctlp);
+}
+
+static struct rcu_perf_ops srcud_ops = {
+       .ptype          = SRCU_FLAVOR,
+       .init           = srcu_sync_perf_init,
+       .cleanup        = srcu_sync_perf_cleanup,
+       .readlock       = srcu_perf_read_lock,
+       .readunlock     = srcu_perf_read_unlock,
+       .started        = NULL,
+       .completed      = srcu_perf_completed,
+       .exp_completed  = srcu_perf_completed,
+       .async          = srcu_call_rcu,
+       .gp_barrier     = srcu_rcu_barrier,
+       .sync           = srcu_perf_synchronize,
+       .exp_sync       = srcu_perf_synchronize_expedited,
+       .name           = "srcud"
+};
+
 /*
  * Definitions for sched perf testing.
  */
@@ -622,7 +651,7 @@ rcu_perf_init(void)
        long i;
        int firsterr = 0;
        static struct rcu_perf_ops *perf_ops[] = {
-               &rcu_ops, &rcu_bh_ops, &srcu_ops, &sched_ops,
+               &rcu_ops, &rcu_bh_ops, &srcu_ops, &srcud_ops, &sched_ops,
                RCUPERF_TASKS_OPS
        };