Commit 0fef924e authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Uladzislau Rezki (Sony)
Browse files

rcutorture: Use symbols for SRCU reader flavors

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: default avatarNeeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
parent 223f16b8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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)
+1 −5
Original line number Diff line number Diff line
@@ -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.
 */
+7 −7
Original line number Diff line number Diff line
@@ -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);
}