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 <paul...@kernel.org>
Cc: Alexei Starovoitov <a...@kernel.org>
Cc: Andrii Nakryiko <and...@kernel.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Kent Overstreet <kent.overstr...@linux.dev>
Cc: <b...@vger.kernel.org>
---
 Documentation/admin-guide/kernel-parameters.txt | 4 ++--
 kernel/rcu/rcutorture.c                         | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt 
b/Documentation/admin-guide/kernel-parameters.txt
index 2d5a09ff6449b..686ea876a89c7 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -5426,8 +5426,8 @@
                        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
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index daf60c988299d..2ae8a5e5e99aa 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -660,6 +660,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;
 }
 
@@ -685,6 +690,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))
-- 
2.40.1


Reply via email to