rcutorture: Add srcu_read_lock_lite() support to rcutorture.reader_flavor
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 15 Oct 2024 16:11:09 +0000 (09:11 -0700)
committerFrederic Weisbecker <frederic@kernel.org>
Tue, 12 Nov 2024 14:44:37 +0000 (15:44 +0100)
This commit causes bit 0x4 of rcutorture.reader_flavor to select the new
srcu_read_lock_lite() and srcu_read_unlock_lite() functions.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Cc: <bpf@vger.kernel.org>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Documentation/admin-guide/kernel-parameters.txt
kernel/rcu/rcutorture.c

index 52922727006fcfb95aaa1319ee4e9653ead85428..203ec51e41d48eab09a9b7e3f1544336f869a414 100644 (file)
                        If there is more than one bit set, the readers
                        are entered from low-order bit up, and are
                        exited in the opposite order.  For SRCU, the
-                       0x1 bit is normal readers and the 0x2 bit is
-                       for NMI-safe readers.
+                       0x1 bit is normal readers, 0x2 NMI-safe readers,
+                       and 0x4 light-weight readers.
 
        rcutorture.shuffle_interval= [KNL]
                        Set task-shuffle interval (s).  Shuffling tasks
index 405decec336776ce96243b4a5fe76599ced855d5..a313cdcb0960f3502bc5a3bb29a251d0f8a23068 100644 (file)
@@ -658,6 +658,11 @@ static int srcu_torture_read_lock(void)
                WARN_ON_ONCE(idx & ~0x1);
                ret += idx << 1;
        }
+       if (reader_flavor & 0x4) {
+               idx = srcu_read_lock_lite(srcu_ctlp);
+               WARN_ON_ONCE(idx & ~0x1);
+               ret += idx << 2;
+       }
        return ret;
 }
 
@@ -683,6 +688,8 @@ srcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg *rtrsp)
 static void srcu_torture_read_unlock(int idx)
 {
        WARN_ON_ONCE((reader_flavor && (idx & ~reader_flavor)) || (!reader_flavor && (idx & ~0x1)));
+       if (reader_flavor & 0x4)
+               srcu_read_unlock_lite(srcu_ctlp, (idx & 0x4) >> 2);
        if (reader_flavor & 0x2)
                srcu_read_unlock_nmisafe(srcu_ctlp, (idx & 0x2) >> 1);
        if ((reader_flavor & 0x1) || !(reader_flavor & 0x7))