]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rcutorture: Exercise DEFINE_STATIC_SRCU_FAST() and init_srcu_struct_fast()
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 5 Nov 2025 20:32:06 +0000 (12:32 -0800)
committerFrederic Weisbecker <frederic@kernel.org>
Wed, 5 Nov 2025 22:58:24 +0000 (23:58 +0100)
This commit updates the initialization for the "srcu" and "srcud" torture
types to use DEFINE_STATIC_SRCU_FAST() and init_srcu_struct_fast(),
respectively, when reader_flavor is equal to SRCU_READ_FLAVOR_FAST.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: <bpf@vger.kernel.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
kernel/rcu/rcutorture.c

index aedbdad150b366f3ff93b21cbcd264d12cbeb55f..ec9d474d60cb92871cc58e425c6abe8c5c777632 100644 (file)
@@ -692,10 +692,18 @@ static struct rcu_torture_ops rcu_busted_ops = {
  */
 
 DEFINE_STATIC_SRCU(srcu_ctl);
+DEFINE_STATIC_SRCU_FAST(srcu_ctlf);
 static struct srcu_struct srcu_ctld;
 static struct srcu_struct *srcu_ctlp = &srcu_ctl;
 static struct rcu_torture_ops srcud_ops;
 
+static void srcu_torture_init(void)
+{
+       rcu_sync_torture_init();
+       if (reader_flavor & SRCU_READ_FLAVOR_FAST)
+               srcu_ctlp = &srcu_ctlf;
+}
+
 static void srcu_get_gp_data(int *flags, unsigned long *gp_seq)
 {
        srcutorture_get_gp_data(srcu_ctlp, flags, gp_seq);
@@ -865,7 +873,7 @@ static void srcu_torture_expedite_current(void)
 
 static struct rcu_torture_ops srcu_ops = {
        .ttype          = SRCU_FLAVOR,
-       .init           = rcu_sync_torture_init,
+       .init           = srcu_torture_init,
        .readlock       = srcu_torture_read_lock,
        .read_delay     = srcu_read_delay,
        .readunlock     = srcu_torture_read_unlock,
@@ -897,10 +905,13 @@ static struct rcu_torture_ops srcu_ops = {
        .name           = "srcu"
 };
 
-static void srcu_torture_init(void)
+static void srcud_torture_init(void)
 {
        rcu_sync_torture_init();
-       WARN_ON(init_srcu_struct(&srcu_ctld));
+       if (reader_flavor & SRCU_READ_FLAVOR_FAST)
+               WARN_ON(init_srcu_struct_fast(&srcu_ctld));
+       else
+               WARN_ON(init_srcu_struct(&srcu_ctld));
        srcu_ctlp = &srcu_ctld;
 }
 
@@ -913,7 +924,7 @@ static void srcu_torture_cleanup(void)
 /* As above, but dynamically allocated. */
 static struct rcu_torture_ops srcud_ops = {
        .ttype          = SRCU_FLAVOR,
-       .init           = srcu_torture_init,
+       .init           = srcud_torture_init,
        .cleanup        = srcu_torture_cleanup,
        .readlock       = srcu_torture_read_lock,
        .read_delay     = srcu_read_delay,