]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rcutorture: Use symbols for SRCU reader flavors
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 14 Nov 2024 19:11:18 +0000 (11:11 -0800)
committerUladzislau Rezki (Sony) <urezki@gmail.com>
Sat, 14 Dec 2024 16:06:08 +0000 (17:06 +0100)
This commit converts rcutorture.c values for the reader_flavor module
parameter from hexadecimal to the SRCU_READ_FLAVOR_* C-preprocessor
macros.  The actual modprobe or kernel-boot-parameter values for
read_flavor must still be entered in hexadecimal.

Link: https://lore.kernel.org/all/c48c9dca-fe07-4833-acaa-28c827e5a79e@amd.com/
Suggested-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
include/linux/srcu.h
include/linux/srcutree.h
kernel/rcu/rcutorture.c

index 08339eb8a01c888a2ff9dce71fb9344518331299..da8224d0f71c5b04a8d6ef565a7309119ca7522d 100644 (file)
@@ -43,6 +43,12 @@ int init_srcu_struct(struct srcu_struct *ssp);
 #define __SRCU_DEP_MAP_INIT(srcu_name)
 #endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 
+/* Values for SRCU Tree srcu_data ->srcu_reader_flavor, but also used by rcutorture. */
+#define SRCU_READ_FLAVOR_NORMAL        0x1             // srcu_read_lock().
+#define SRCU_READ_FLAVOR_NMI   0x2             // srcu_read_lock_nmisafe().
+#define SRCU_READ_FLAVOR_LITE  0x4             // srcu_read_lock_lite().
+#define SRCU_READ_FLAVOR_ALL   0x7             // All of the above.
+
 #ifdef CONFIG_TINY_SRCU
 #include <linux/srcutiny.h>
 #elif defined(CONFIG_TREE_SRCU)
index 490aeecc6bb478f3e1a38e89edbb656caafd4227..80016bbed6725cf8eb7a04788802327e57bbfef3 100644 (file)
@@ -26,6 +26,7 @@ struct srcu_data {
        atomic_long_t srcu_lock_count[2];       /* Locks per CPU. */
        atomic_long_t srcu_unlock_count[2];     /* Unlocks per CPU. */
        int srcu_reader_flavor;                 /* Reader flavor for srcu_struct structure? */
+                                               /* Values: SRCU_READ_FLAVOR_.*  */
 
        /* Update-side state. */
        spinlock_t __private lock ____cacheline_internodealigned_in_smp;
@@ -43,11 +44,6 @@ struct srcu_data {
        struct srcu_struct *ssp;
 };
 
-/* Values for ->srcu_reader_flavor. */
-#define SRCU_READ_FLAVOR_NORMAL        0x1             // srcu_read_lock().
-#define SRCU_READ_FLAVOR_NMI   0x2             // srcu_read_lock_nmisafe().
-#define SRCU_READ_FLAVOR_LITE  0x4             // srcu_read_lock_lite().
-
 /*
  * Node in SRCU combining tree, similar in function to rcu_data.
  */
index 41b661bf000a7be5f04cbba740a19914433498cd..d26fb1d33ed9ae60e87ab8a2ec919bce8cd89d42 100644 (file)
@@ -121,7 +121,7 @@ torture_param(int, preempt_duration, 0, "Preemption duration (ms), zero to disab
 torture_param(int, preempt_interval, MSEC_PER_SEC, "Interval between preemptions (ms)");
 torture_param(int, read_exit_delay, 13, "Delay between read-then-exit episodes (s)");
 torture_param(int, read_exit_burst, 16, "# of read-then-exit bursts per episode, zero to disable");
-torture_param(int, reader_flavor, 0x1, "Reader flavors to use, one per bit.");
+torture_param(int, reader_flavor, SRCU_READ_FLAVOR_NORMAL, "Reader flavors to use, one per bit.");
 torture_param(int, shuffle_interval, 3, "Number of seconds between shuffles");
 torture_param(int, shutdown_secs, 0, "Shutdown time (s), <= zero to disable.");
 torture_param(int, stall_cpu, 0, "Stall duration (s), zero to disable.");
@@ -679,17 +679,17 @@ static int srcu_torture_read_lock(void)
        int idx;
        int ret = 0;
 
-       if ((reader_flavor & 0x1) || !(reader_flavor & 0x7)) {
+       if ((reader_flavor & SRCU_READ_FLAVOR_NORMAL) || !(reader_flavor & SRCU_READ_FLAVOR_ALL)) {
                idx = srcu_read_lock(srcu_ctlp);
                WARN_ON_ONCE(idx & ~0x1);
                ret += idx;
        }
-       if (reader_flavor & 0x2) {
+       if (reader_flavor & SRCU_READ_FLAVOR_NMI) {
                idx = srcu_read_lock_nmisafe(srcu_ctlp);
                WARN_ON_ONCE(idx & ~0x1);
                ret += idx << 1;
        }
-       if (reader_flavor & 0x4) {
+       if (reader_flavor & SRCU_READ_FLAVOR_LITE) {
                idx = srcu_read_lock_lite(srcu_ctlp);
                WARN_ON_ONCE(idx & ~0x1);
                ret += idx << 2;
@@ -719,11 +719,11 @@ 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)
+       if (reader_flavor & SRCU_READ_FLAVOR_LITE)
                srcu_read_unlock_lite(srcu_ctlp, (idx & 0x4) >> 2);
-       if (reader_flavor & 0x2)
+       if (reader_flavor & SRCU_READ_FLAVOR_NMI)
                srcu_read_unlock_nmisafe(srcu_ctlp, (idx & 0x2) >> 1);
-       if ((reader_flavor & 0x1) || !(reader_flavor & 0x7))
+       if ((reader_flavor & SRCU_READ_FLAVOR_NORMAL) || !(reader_flavor & SRCU_READ_FLAVOR_ALL))
                srcu_read_unlock(srcu_ctlp, idx & 0x1);
 }