xref: /openbmc/linux/kernel/rcu/rcutorture.c (revision c005e2f62f8421b13b9a31adb9db7281f1a19e68)
1  // SPDX-License-Identifier: GPL-2.0+
2  /*
3   * Read-Copy Update module-based torture test facility
4   *
5   * Copyright (C) IBM Corporation, 2005, 2006
6   *
7   * Authors: Paul E. McKenney <paulmck@linux.ibm.com>
8   *	  Josh Triplett <josh@joshtriplett.org>
9   *
10   * See also:  Documentation/RCU/torture.rst
11   */
12  
13  #define pr_fmt(fmt) fmt
14  
15  #include <linux/types.h>
16  #include <linux/kernel.h>
17  #include <linux/init.h>
18  #include <linux/module.h>
19  #include <linux/kthread.h>
20  #include <linux/err.h>
21  #include <linux/spinlock.h>
22  #include <linux/smp.h>
23  #include <linux/rcupdate_wait.h>
24  #include <linux/interrupt.h>
25  #include <linux/sched/signal.h>
26  #include <uapi/linux/sched/types.h>
27  #include <linux/atomic.h>
28  #include <linux/bitops.h>
29  #include <linux/completion.h>
30  #include <linux/moduleparam.h>
31  #include <linux/percpu.h>
32  #include <linux/notifier.h>
33  #include <linux/reboot.h>
34  #include <linux/freezer.h>
35  #include <linux/cpu.h>
36  #include <linux/delay.h>
37  #include <linux/stat.h>
38  #include <linux/srcu.h>
39  #include <linux/slab.h>
40  #include <linux/trace_clock.h>
41  #include <asm/byteorder.h>
42  #include <linux/torture.h>
43  #include <linux/vmalloc.h>
44  #include <linux/sched/debug.h>
45  #include <linux/sched/sysctl.h>
46  #include <linux/oom.h>
47  #include <linux/tick.h>
48  #include <linux/rcupdate_trace.h>
49  #include <linux/nmi.h>
50  
51  #include "rcu.h"
52  
53  MODULE_LICENSE("GPL");
54  MODULE_AUTHOR("Paul E. McKenney <paulmck@linux.ibm.com> and Josh Triplett <josh@joshtriplett.org>");
55  
56  /* Bits for ->extendables field, extendables param, and related definitions. */
57  #define RCUTORTURE_RDR_SHIFT_1	 8	/* Put SRCU index in upper bits. */
58  #define RCUTORTURE_RDR_MASK_1	 (1 << RCUTORTURE_RDR_SHIFT_1)
59  #define RCUTORTURE_RDR_SHIFT_2	 9	/* Put SRCU index in upper bits. */
60  #define RCUTORTURE_RDR_MASK_2	 (1 << RCUTORTURE_RDR_SHIFT_2)
61  #define RCUTORTURE_RDR_BH	 0x01	/* Extend readers by disabling bh. */
62  #define RCUTORTURE_RDR_IRQ	 0x02	/*  ... disabling interrupts. */
63  #define RCUTORTURE_RDR_PREEMPT	 0x04	/*  ... disabling preemption. */
64  #define RCUTORTURE_RDR_RBH	 0x08	/*  ... rcu_read_lock_bh(). */
65  #define RCUTORTURE_RDR_SCHED	 0x10	/*  ... rcu_read_lock_sched(). */
66  #define RCUTORTURE_RDR_RCU_1	 0x20	/*  ... entering another RCU reader. */
67  #define RCUTORTURE_RDR_RCU_2	 0x40	/*  ... entering another RCU reader. */
68  #define RCUTORTURE_RDR_NBITS	 7	/* Number of bits defined above. */
69  #define RCUTORTURE_MAX_EXTEND	 \
70  	(RCUTORTURE_RDR_BH | RCUTORTURE_RDR_IRQ | RCUTORTURE_RDR_PREEMPT | \
71  	 RCUTORTURE_RDR_RBH | RCUTORTURE_RDR_SCHED)
72  #define RCUTORTURE_RDR_MAX_LOOPS 0x7	/* Maximum reader extensions. */
73  					/* Must be power of two minus one. */
74  #define RCUTORTURE_RDR_MAX_SEGS (RCUTORTURE_RDR_MAX_LOOPS + 3)
75  
76  torture_param(int, extendables, RCUTORTURE_MAX_EXTEND,
77  	      "Extend readers by disabling bh (1), irqs (2), or preempt (4)");
78  torture_param(int, fqs_duration, 0, "Duration of fqs bursts (us), 0 to disable");
79  torture_param(int, fqs_holdoff, 0, "Holdoff time within fqs bursts (us)");
80  torture_param(int, fqs_stutter, 3, "Wait time between fqs bursts (s)");
81  torture_param(int, fwd_progress, 1, "Number of grace-period forward progress tasks (0 to disable)");
82  torture_param(int, fwd_progress_div, 4, "Fraction of CPU stall to wait");
83  torture_param(int, fwd_progress_holdoff, 60, "Time between forward-progress tests (s)");
84  torture_param(bool, fwd_progress_need_resched, 1, "Hide cond_resched() behind need_resched()");
85  torture_param(bool, gp_cond, false, "Use conditional/async GP wait primitives");
86  torture_param(bool, gp_cond_exp, false, "Use conditional/async expedited GP wait primitives");
87  torture_param(bool, gp_cond_full, false, "Use conditional/async full-state GP wait primitives");
88  torture_param(bool, gp_cond_exp_full, false,
89  		    "Use conditional/async full-stateexpedited GP wait primitives");
90  torture_param(bool, gp_exp, false, "Use expedited GP wait primitives");
91  torture_param(bool, gp_normal, false, "Use normal (non-expedited) GP wait primitives");
92  torture_param(bool, gp_poll, false, "Use polling GP wait primitives");
93  torture_param(bool, gp_poll_exp, false, "Use polling expedited GP wait primitives");
94  torture_param(bool, gp_poll_full, false, "Use polling full-state GP wait primitives");
95  torture_param(bool, gp_poll_exp_full, false, "Use polling full-state expedited GP wait primitives");
96  torture_param(bool, gp_sync, false, "Use synchronous GP wait primitives");
97  torture_param(int, irqreader, 1, "Allow RCU readers from irq handlers");
98  torture_param(int, leakpointer, 0, "Leak pointer dereferences from readers");
99  torture_param(int, n_barrier_cbs, 0, "# of callbacks/kthreads for barrier testing");
100  torture_param(int, nfakewriters, 4, "Number of RCU fake writer threads");
101  torture_param(int, nreaders, -1, "Number of RCU reader threads");
102  torture_param(int, object_debug, 0, "Enable debug-object double call_rcu() testing");
103  torture_param(int, onoff_holdoff, 0, "Time after boot before CPU hotplugs (s)");
104  torture_param(int, onoff_interval, 0, "Time between CPU hotplugs (jiffies), 0=disable");
105  torture_param(int, nocbs_nthreads, 0, "Number of NOCB toggle threads, 0 to disable");
106  torture_param(int, nocbs_toggle, 1000, "Time between toggling nocb state (ms)");
107  torture_param(int, read_exit_delay, 13, "Delay between read-then-exit episodes (s)");
108  torture_param(int, read_exit_burst, 16, "# of read-then-exit bursts per episode, zero to disable");
109  torture_param(int, shuffle_interval, 3, "Number of seconds between shuffles");
110  torture_param(int, shutdown_secs, 0, "Shutdown time (s), <= zero to disable.");
111  torture_param(int, stall_cpu, 0, "Stall duration (s), zero to disable.");
112  torture_param(int, stall_cpu_holdoff, 10, "Time to wait before starting stall (s).");
113  torture_param(bool, stall_no_softlockup, false, "Avoid softlockup warning during cpu stall.");
114  torture_param(int, stall_cpu_irqsoff, 0, "Disable interrupts while stalling.");
115  torture_param(int, stall_cpu_block, 0, "Sleep while stalling.");
116  torture_param(int, stall_gp_kthread, 0, "Grace-period kthread stall duration (s).");
117  torture_param(int, stat_interval, 60, "Number of seconds between stats printk()s");
118  torture_param(int, stutter, 5, "Number of seconds to run/halt test");
119  torture_param(int, test_boost, 1, "Test RCU prio boost: 0=no, 1=maybe, 2=yes.");
120  torture_param(int, test_boost_duration, 4, "Duration of each boost test, seconds.");
121  torture_param(int, test_boost_interval, 7, "Interval between boost tests, seconds.");
122  torture_param(int, test_nmis, 0, "End-test NMI tests, 0 to disable.");
123  torture_param(bool, test_no_idle_hz, true, "Test support for tickless idle CPUs");
124  torture_param(int, test_srcu_lockdep, 0, "Test specified SRCU deadlock scenario.");
125  torture_param(int, verbose, 1, "Enable verbose debugging printk()s");
126  
127  static char *torture_type = "rcu";
128  module_param(torture_type, charp, 0444);
129  MODULE_PARM_DESC(torture_type, "Type of RCU to torture (rcu, srcu, ...)");
130  
131  static int nrealnocbers;
132  static int nrealreaders;
133  static struct task_struct *writer_task;
134  static struct task_struct **fakewriter_tasks;
135  static struct task_struct **reader_tasks;
136  static struct task_struct **nocb_tasks;
137  static struct task_struct *stats_task;
138  static struct task_struct *fqs_task;
139  static struct task_struct *boost_tasks[NR_CPUS];
140  static struct task_struct *stall_task;
141  static struct task_struct **fwd_prog_tasks;
142  static struct task_struct **barrier_cbs_tasks;
143  static struct task_struct *barrier_task;
144  static struct task_struct *read_exit_task;
145  
146  #define RCU_TORTURE_PIPE_LEN 10
147  
148  // Mailbox-like structure to check RCU global memory ordering.
149  struct rcu_torture_reader_check {
150  	unsigned long rtc_myloops;
151  	int rtc_chkrdr;
152  	unsigned long rtc_chkloops;
153  	int rtc_ready;
154  	struct rcu_torture_reader_check *rtc_assigner;
155  } ____cacheline_internodealigned_in_smp;
156  
157  // Update-side data structure used to check RCU readers.
158  struct rcu_torture {
159  	struct rcu_head rtort_rcu;
160  	int rtort_pipe_count;
161  	struct list_head rtort_free;
162  	int rtort_mbtest;
163  	struct rcu_torture_reader_check *rtort_chkp;
164  };
165  
166  static LIST_HEAD(rcu_torture_freelist);
167  static struct rcu_torture __rcu *rcu_torture_current;
168  static unsigned long rcu_torture_current_version;
169  static struct rcu_torture rcu_tortures[10 * RCU_TORTURE_PIPE_LEN];
170  static DEFINE_SPINLOCK(rcu_torture_lock);
171  static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_count);
172  static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_batch);
173  static atomic_t rcu_torture_wcount[RCU_TORTURE_PIPE_LEN + 1];
174  static struct rcu_torture_reader_check *rcu_torture_reader_mbchk;
175  static atomic_t n_rcu_torture_alloc;
176  static atomic_t n_rcu_torture_alloc_fail;
177  static atomic_t n_rcu_torture_free;
178  static atomic_t n_rcu_torture_mberror;
179  static atomic_t n_rcu_torture_mbchk_fail;
180  static atomic_t n_rcu_torture_mbchk_tries;
181  static atomic_t n_rcu_torture_error;
182  static long n_rcu_torture_barrier_error;
183  static long n_rcu_torture_boost_ktrerror;
184  static long n_rcu_torture_boost_failure;
185  static long n_rcu_torture_boosts;
186  static atomic_long_t n_rcu_torture_timers;
187  static long n_barrier_attempts;
188  static long n_barrier_successes; /* did rcu_barrier test succeed? */
189  static unsigned long n_read_exits;
190  static struct list_head rcu_torture_removed;
191  static unsigned long shutdown_jiffies;
192  static unsigned long start_gp_seq;
193  static atomic_long_t n_nocb_offload;
194  static atomic_long_t n_nocb_deoffload;
195  
196  static int rcu_torture_writer_state;
197  #define RTWS_FIXED_DELAY	0
198  #define RTWS_DELAY		1
199  #define RTWS_REPLACE		2
200  #define RTWS_DEF_FREE		3
201  #define RTWS_EXP_SYNC		4
202  #define RTWS_COND_GET		5
203  #define RTWS_COND_GET_FULL	6
204  #define RTWS_COND_GET_EXP	7
205  #define RTWS_COND_GET_EXP_FULL	8
206  #define RTWS_COND_SYNC		9
207  #define RTWS_COND_SYNC_FULL	10
208  #define RTWS_COND_SYNC_EXP	11
209  #define RTWS_COND_SYNC_EXP_FULL	12
210  #define RTWS_POLL_GET		13
211  #define RTWS_POLL_GET_FULL	14
212  #define RTWS_POLL_GET_EXP	15
213  #define RTWS_POLL_GET_EXP_FULL	16
214  #define RTWS_POLL_WAIT		17
215  #define RTWS_POLL_WAIT_FULL	18
216  #define RTWS_POLL_WAIT_EXP	19
217  #define RTWS_POLL_WAIT_EXP_FULL	20
218  #define RTWS_SYNC		21
219  #define RTWS_STUTTER		22
220  #define RTWS_STOPPING		23
221  static const char * const rcu_torture_writer_state_names[] = {
222  	"RTWS_FIXED_DELAY",
223  	"RTWS_DELAY",
224  	"RTWS_REPLACE",
225  	"RTWS_DEF_FREE",
226  	"RTWS_EXP_SYNC",
227  	"RTWS_COND_GET",
228  	"RTWS_COND_GET_FULL",
229  	"RTWS_COND_GET_EXP",
230  	"RTWS_COND_GET_EXP_FULL",
231  	"RTWS_COND_SYNC",
232  	"RTWS_COND_SYNC_FULL",
233  	"RTWS_COND_SYNC_EXP",
234  	"RTWS_COND_SYNC_EXP_FULL",
235  	"RTWS_POLL_GET",
236  	"RTWS_POLL_GET_FULL",
237  	"RTWS_POLL_GET_EXP",
238  	"RTWS_POLL_GET_EXP_FULL",
239  	"RTWS_POLL_WAIT",
240  	"RTWS_POLL_WAIT_FULL",
241  	"RTWS_POLL_WAIT_EXP",
242  	"RTWS_POLL_WAIT_EXP_FULL",
243  	"RTWS_SYNC",
244  	"RTWS_STUTTER",
245  	"RTWS_STOPPING",
246  };
247  
248  /* Record reader segment types and duration for first failing read. */
249  struct rt_read_seg {
250  	int rt_readstate;
251  	unsigned long rt_delay_jiffies;
252  	unsigned long rt_delay_ms;
253  	unsigned long rt_delay_us;
254  	bool rt_preempted;
255  };
256  static int err_segs_recorded;
257  static struct rt_read_seg err_segs[RCUTORTURE_RDR_MAX_SEGS];
258  static int rt_read_nsegs;
259  
rcu_torture_writer_state_getname(void)260  static const char *rcu_torture_writer_state_getname(void)
261  {
262  	unsigned int i = READ_ONCE(rcu_torture_writer_state);
263  
264  	if (i >= ARRAY_SIZE(rcu_torture_writer_state_names))
265  		return "???";
266  	return rcu_torture_writer_state_names[i];
267  }
268  
269  #ifdef CONFIG_RCU_TRACE
rcu_trace_clock_local(void)270  static u64 notrace rcu_trace_clock_local(void)
271  {
272  	u64 ts = trace_clock_local();
273  
274  	(void)do_div(ts, NSEC_PER_USEC);
275  	return ts;
276  }
277  #else /* #ifdef CONFIG_RCU_TRACE */
rcu_trace_clock_local(void)278  static u64 notrace rcu_trace_clock_local(void)
279  {
280  	return 0ULL;
281  }
282  #endif /* #else #ifdef CONFIG_RCU_TRACE */
283  
284  /*
285   * Stop aggressive CPU-hog tests a bit before the end of the test in order
286   * to avoid interfering with test shutdown.
287   */
shutdown_time_arrived(void)288  static bool shutdown_time_arrived(void)
289  {
290  	return shutdown_secs && time_after(jiffies, shutdown_jiffies - 30 * HZ);
291  }
292  
293  static unsigned long boost_starttime;	/* jiffies of next boost test start. */
294  static DEFINE_MUTEX(boost_mutex);	/* protect setting boost_starttime */
295  					/*  and boost task create/destroy. */
296  static atomic_t barrier_cbs_count;	/* Barrier callbacks registered. */
297  static bool barrier_phase;		/* Test phase. */
298  static atomic_t barrier_cbs_invoked;	/* Barrier callbacks invoked. */
299  static wait_queue_head_t *barrier_cbs_wq; /* Coordinate barrier testing. */
300  static DECLARE_WAIT_QUEUE_HEAD(barrier_wq);
301  
302  static atomic_t rcu_fwd_cb_nodelay;	/* Short rcu_torture_delay() delays. */
303  
304  /*
305   * Allocate an element from the rcu_tortures pool.
306   */
307  static struct rcu_torture *
rcu_torture_alloc(void)308  rcu_torture_alloc(void)
309  {
310  	struct list_head *p;
311  
312  	spin_lock_bh(&rcu_torture_lock);
313  	if (list_empty(&rcu_torture_freelist)) {
314  		atomic_inc(&n_rcu_torture_alloc_fail);
315  		spin_unlock_bh(&rcu_torture_lock);
316  		return NULL;
317  	}
318  	atomic_inc(&n_rcu_torture_alloc);
319  	p = rcu_torture_freelist.next;
320  	list_del_init(p);
321  	spin_unlock_bh(&rcu_torture_lock);
322  	return container_of(p, struct rcu_torture, rtort_free);
323  }
324  
325  /*
326   * Free an element to the rcu_tortures pool.
327   */
328  static void
rcu_torture_free(struct rcu_torture * p)329  rcu_torture_free(struct rcu_torture *p)
330  {
331  	atomic_inc(&n_rcu_torture_free);
332  	spin_lock_bh(&rcu_torture_lock);
333  	list_add_tail(&p->rtort_free, &rcu_torture_freelist);
334  	spin_unlock_bh(&rcu_torture_lock);
335  }
336  
337  /*
338   * Operations vector for selecting different types of tests.
339   */
340  
341  struct rcu_torture_ops {
342  	int ttype;
343  	void (*init)(void);
344  	void (*cleanup)(void);
345  	int (*readlock)(void);
346  	void (*read_delay)(struct torture_random_state *rrsp,
347  			   struct rt_read_seg *rtrsp);
348  	void (*readunlock)(int idx);
349  	int (*readlock_held)(void);
350  	unsigned long (*get_gp_seq)(void);
351  	unsigned long (*gp_diff)(unsigned long new, unsigned long old);
352  	void (*deferred_free)(struct rcu_torture *p);
353  	void (*sync)(void);
354  	void (*exp_sync)(void);
355  	unsigned long (*get_gp_state_exp)(void);
356  	unsigned long (*start_gp_poll_exp)(void);
357  	void (*start_gp_poll_exp_full)(struct rcu_gp_oldstate *rgosp);
358  	bool (*poll_gp_state_exp)(unsigned long oldstate);
359  	void (*cond_sync_exp)(unsigned long oldstate);
360  	void (*cond_sync_exp_full)(struct rcu_gp_oldstate *rgosp);
361  	unsigned long (*get_comp_state)(void);
362  	void (*get_comp_state_full)(struct rcu_gp_oldstate *rgosp);
363  	bool (*same_gp_state)(unsigned long oldstate1, unsigned long oldstate2);
364  	bool (*same_gp_state_full)(struct rcu_gp_oldstate *rgosp1, struct rcu_gp_oldstate *rgosp2);
365  	unsigned long (*get_gp_state)(void);
366  	void (*get_gp_state_full)(struct rcu_gp_oldstate *rgosp);
367  	unsigned long (*get_gp_completed)(void);
368  	void (*get_gp_completed_full)(struct rcu_gp_oldstate *rgosp);
369  	unsigned long (*start_gp_poll)(void);
370  	void (*start_gp_poll_full)(struct rcu_gp_oldstate *rgosp);
371  	bool (*poll_gp_state)(unsigned long oldstate);
372  	bool (*poll_gp_state_full)(struct rcu_gp_oldstate *rgosp);
373  	bool (*poll_need_2gp)(bool poll, bool poll_full);
374  	void (*cond_sync)(unsigned long oldstate);
375  	void (*cond_sync_full)(struct rcu_gp_oldstate *rgosp);
376  	call_rcu_func_t call;
377  	void (*cb_barrier)(void);
378  	void (*fqs)(void);
379  	void (*stats)(void);
380  	void (*gp_kthread_dbg)(void);
381  	bool (*check_boost_failed)(unsigned long gp_state, int *cpup);
382  	int (*stall_dur)(void);
383  	long cbflood_max;
384  	int irq_capable;
385  	int can_boost;
386  	int extendables;
387  	int slow_gps;
388  	int no_pi_lock;
389  	const char *name;
390  };
391  
392  static struct rcu_torture_ops *cur_ops;
393  
394  /*
395   * Definitions for rcu torture testing.
396   */
397  
torture_readlock_not_held(void)398  static int torture_readlock_not_held(void)
399  {
400  	return rcu_read_lock_bh_held() || rcu_read_lock_sched_held();
401  }
402  
rcu_torture_read_lock(void)403  static int rcu_torture_read_lock(void)
404  {
405  	rcu_read_lock();
406  	return 0;
407  }
408  
409  static void
rcu_read_delay(struct torture_random_state * rrsp,struct rt_read_seg * rtrsp)410  rcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg *rtrsp)
411  {
412  	unsigned long started;
413  	unsigned long completed;
414  	const unsigned long shortdelay_us = 200;
415  	unsigned long longdelay_ms = 300;
416  	unsigned long long ts;
417  
418  	/* We want a short delay sometimes to make a reader delay the grace
419  	 * period, and we want a long delay occasionally to trigger
420  	 * force_quiescent_state. */
421  
422  	if (!atomic_read(&rcu_fwd_cb_nodelay) &&
423  	    !(torture_random(rrsp) % (nrealreaders * 2000 * longdelay_ms))) {
424  		started = cur_ops->get_gp_seq();
425  		ts = rcu_trace_clock_local();
426  		if (preempt_count() & (SOFTIRQ_MASK | HARDIRQ_MASK))
427  			longdelay_ms = 5; /* Avoid triggering BH limits. */
428  		mdelay(longdelay_ms);
429  		rtrsp->rt_delay_ms = longdelay_ms;
430  		completed = cur_ops->get_gp_seq();
431  		do_trace_rcu_torture_read(cur_ops->name, NULL, ts,
432  					  started, completed);
433  	}
434  	if (!(torture_random(rrsp) % (nrealreaders * 2 * shortdelay_us))) {
435  		udelay(shortdelay_us);
436  		rtrsp->rt_delay_us = shortdelay_us;
437  	}
438  	if (!preempt_count() &&
439  	    !(torture_random(rrsp) % (nrealreaders * 500))) {
440  		torture_preempt_schedule();  /* QS only if preemptible. */
441  		rtrsp->rt_preempted = true;
442  	}
443  }
444  
rcu_torture_read_unlock(int idx)445  static void rcu_torture_read_unlock(int idx)
446  {
447  	rcu_read_unlock();
448  }
449  
450  /*
451   * Update callback in the pipe.  This should be invoked after a grace period.
452   */
453  static bool
rcu_torture_pipe_update_one(struct rcu_torture * rp)454  rcu_torture_pipe_update_one(struct rcu_torture *rp)
455  {
456  	int i;
457  	struct rcu_torture_reader_check *rtrcp = READ_ONCE(rp->rtort_chkp);
458  
459  	if (rtrcp) {
460  		WRITE_ONCE(rp->rtort_chkp, NULL);
461  		smp_store_release(&rtrcp->rtc_ready, 1); // Pair with smp_load_acquire().
462  	}
463  	i = READ_ONCE(rp->rtort_pipe_count);
464  	if (i > RCU_TORTURE_PIPE_LEN)
465  		i = RCU_TORTURE_PIPE_LEN;
466  	atomic_inc(&rcu_torture_wcount[i]);
467  	WRITE_ONCE(rp->rtort_pipe_count, i + 1);
468  	if (rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
469  		rp->rtort_mbtest = 0;
470  		return true;
471  	}
472  	return false;
473  }
474  
475  /*
476   * Update all callbacks in the pipe.  Suitable for synchronous grace-period
477   * primitives.
478   */
479  static void
rcu_torture_pipe_update(struct rcu_torture * old_rp)480  rcu_torture_pipe_update(struct rcu_torture *old_rp)
481  {
482  	struct rcu_torture *rp;
483  	struct rcu_torture *rp1;
484  
485  	if (old_rp)
486  		list_add(&old_rp->rtort_free, &rcu_torture_removed);
487  	list_for_each_entry_safe(rp, rp1, &rcu_torture_removed, rtort_free) {
488  		if (rcu_torture_pipe_update_one(rp)) {
489  			list_del(&rp->rtort_free);
490  			rcu_torture_free(rp);
491  		}
492  	}
493  }
494  
495  static void
rcu_torture_cb(struct rcu_head * p)496  rcu_torture_cb(struct rcu_head *p)
497  {
498  	struct rcu_torture *rp = container_of(p, struct rcu_torture, rtort_rcu);
499  
500  	if (torture_must_stop_irq()) {
501  		/* Test is ending, just drop callbacks on the floor. */
502  		/* The next initialization will pick up the pieces. */
503  		return;
504  	}
505  	if (rcu_torture_pipe_update_one(rp))
506  		rcu_torture_free(rp);
507  	else
508  		cur_ops->deferred_free(rp);
509  }
510  
rcu_no_completed(void)511  static unsigned long rcu_no_completed(void)
512  {
513  	return 0;
514  }
515  
rcu_torture_deferred_free(struct rcu_torture * p)516  static void rcu_torture_deferred_free(struct rcu_torture *p)
517  {
518  	call_rcu_hurry(&p->rtort_rcu, rcu_torture_cb);
519  }
520  
rcu_sync_torture_init(void)521  static void rcu_sync_torture_init(void)
522  {
523  	INIT_LIST_HEAD(&rcu_torture_removed);
524  }
525  
rcu_poll_need_2gp(bool poll,bool poll_full)526  static bool rcu_poll_need_2gp(bool poll, bool poll_full)
527  {
528  	return poll;
529  }
530  
531  static struct rcu_torture_ops rcu_ops = {
532  	.ttype			= RCU_FLAVOR,
533  	.init			= rcu_sync_torture_init,
534  	.readlock		= rcu_torture_read_lock,
535  	.read_delay		= rcu_read_delay,
536  	.readunlock		= rcu_torture_read_unlock,
537  	.readlock_held		= torture_readlock_not_held,
538  	.get_gp_seq		= rcu_get_gp_seq,
539  	.gp_diff		= rcu_seq_diff,
540  	.deferred_free		= rcu_torture_deferred_free,
541  	.sync			= synchronize_rcu,
542  	.exp_sync		= synchronize_rcu_expedited,
543  	.same_gp_state		= same_state_synchronize_rcu,
544  	.same_gp_state_full	= same_state_synchronize_rcu_full,
545  	.get_comp_state		= get_completed_synchronize_rcu,
546  	.get_comp_state_full	= get_completed_synchronize_rcu_full,
547  	.get_gp_state		= get_state_synchronize_rcu,
548  	.get_gp_state_full	= get_state_synchronize_rcu_full,
549  	.get_gp_completed	= get_completed_synchronize_rcu,
550  	.get_gp_completed_full	= get_completed_synchronize_rcu_full,
551  	.start_gp_poll		= start_poll_synchronize_rcu,
552  	.start_gp_poll_full	= start_poll_synchronize_rcu_full,
553  	.poll_gp_state		= poll_state_synchronize_rcu,
554  	.poll_gp_state_full	= poll_state_synchronize_rcu_full,
555  	.poll_need_2gp		= rcu_poll_need_2gp,
556  	.cond_sync		= cond_synchronize_rcu,
557  	.cond_sync_full		= cond_synchronize_rcu_full,
558  	.get_gp_state_exp	= get_state_synchronize_rcu,
559  	.start_gp_poll_exp	= start_poll_synchronize_rcu_expedited,
560  	.start_gp_poll_exp_full	= start_poll_synchronize_rcu_expedited_full,
561  	.poll_gp_state_exp	= poll_state_synchronize_rcu,
562  	.cond_sync_exp		= cond_synchronize_rcu_expedited,
563  	.call			= call_rcu_hurry,
564  	.cb_barrier		= rcu_barrier,
565  	.fqs			= rcu_force_quiescent_state,
566  	.stats			= NULL,
567  	.gp_kthread_dbg		= show_rcu_gp_kthreads,
568  	.check_boost_failed	= rcu_check_boost_fail,
569  	.stall_dur		= rcu_jiffies_till_stall_check,
570  	.irq_capable		= 1,
571  	.can_boost		= IS_ENABLED(CONFIG_RCU_BOOST),
572  	.extendables		= RCUTORTURE_MAX_EXTEND,
573  	.name			= "rcu"
574  };
575  
576  /*
577   * Don't even think about trying any of these in real life!!!
578   * The names includes "busted", and they really means it!
579   * The only purpose of these functions is to provide a buggy RCU
580   * implementation to make sure that rcutorture correctly emits
581   * buggy-RCU error messages.
582   */
rcu_busted_torture_deferred_free(struct rcu_torture * p)583  static void rcu_busted_torture_deferred_free(struct rcu_torture *p)
584  {
585  	/* This is a deliberate bug for testing purposes only! */
586  	rcu_torture_cb(&p->rtort_rcu);
587  }
588  
synchronize_rcu_busted(void)589  static void synchronize_rcu_busted(void)
590  {
591  	/* This is a deliberate bug for testing purposes only! */
592  }
593  
594  static void
call_rcu_busted(struct rcu_head * head,rcu_callback_t func)595  call_rcu_busted(struct rcu_head *head, rcu_callback_t func)
596  {
597  	/* This is a deliberate bug for testing purposes only! */
598  	func(head);
599  }
600  
601  static struct rcu_torture_ops rcu_busted_ops = {
602  	.ttype		= INVALID_RCU_FLAVOR,
603  	.init		= rcu_sync_torture_init,
604  	.readlock	= rcu_torture_read_lock,
605  	.read_delay	= rcu_read_delay,  /* just reuse rcu's version. */
606  	.readunlock	= rcu_torture_read_unlock,
607  	.readlock_held	= torture_readlock_not_held,
608  	.get_gp_seq	= rcu_no_completed,
609  	.deferred_free	= rcu_busted_torture_deferred_free,
610  	.sync		= synchronize_rcu_busted,
611  	.exp_sync	= synchronize_rcu_busted,
612  	.call		= call_rcu_busted,
613  	.cb_barrier	= NULL,
614  	.fqs		= NULL,
615  	.stats		= NULL,
616  	.irq_capable	= 1,
617  	.name		= "busted"
618  };
619  
620  /*
621   * Definitions for srcu torture testing.
622   */
623  
624  DEFINE_STATIC_SRCU(srcu_ctl);
625  static struct srcu_struct srcu_ctld;
626  static struct srcu_struct *srcu_ctlp = &srcu_ctl;
627  static struct rcu_torture_ops srcud_ops;
628  
srcu_torture_read_lock(void)629  static int srcu_torture_read_lock(void)
630  {
631  	if (cur_ops == &srcud_ops)
632  		return srcu_read_lock_nmisafe(srcu_ctlp);
633  	else
634  		return srcu_read_lock(srcu_ctlp);
635  }
636  
637  static void
srcu_read_delay(struct torture_random_state * rrsp,struct rt_read_seg * rtrsp)638  srcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg *rtrsp)
639  {
640  	long delay;
641  	const long uspertick = 1000000 / HZ;
642  	const long longdelay = 10;
643  
644  	/* We want there to be long-running readers, but not all the time. */
645  
646  	delay = torture_random(rrsp) %
647  		(nrealreaders * 2 * longdelay * uspertick);
648  	if (!delay && in_task()) {
649  		schedule_timeout_interruptible(longdelay);
650  		rtrsp->rt_delay_jiffies = longdelay;
651  	} else {
652  		rcu_read_delay(rrsp, rtrsp);
653  	}
654  }
655  
srcu_torture_read_unlock(int idx)656  static void srcu_torture_read_unlock(int idx)
657  {
658  	if (cur_ops == &srcud_ops)
659  		srcu_read_unlock_nmisafe(srcu_ctlp, idx);
660  	else
661  		srcu_read_unlock(srcu_ctlp, idx);
662  }
663  
torture_srcu_read_lock_held(void)664  static int torture_srcu_read_lock_held(void)
665  {
666  	return srcu_read_lock_held(srcu_ctlp);
667  }
668  
srcu_torture_completed(void)669  static unsigned long srcu_torture_completed(void)
670  {
671  	return srcu_batches_completed(srcu_ctlp);
672  }
673  
srcu_torture_deferred_free(struct rcu_torture * rp)674  static void srcu_torture_deferred_free(struct rcu_torture *rp)
675  {
676  	call_srcu(srcu_ctlp, &rp->rtort_rcu, rcu_torture_cb);
677  }
678  
srcu_torture_synchronize(void)679  static void srcu_torture_synchronize(void)
680  {
681  	synchronize_srcu(srcu_ctlp);
682  }
683  
srcu_torture_get_gp_state(void)684  static unsigned long srcu_torture_get_gp_state(void)
685  {
686  	return get_state_synchronize_srcu(srcu_ctlp);
687  }
688  
srcu_torture_start_gp_poll(void)689  static unsigned long srcu_torture_start_gp_poll(void)
690  {
691  	return start_poll_synchronize_srcu(srcu_ctlp);
692  }
693  
srcu_torture_poll_gp_state(unsigned long oldstate)694  static bool srcu_torture_poll_gp_state(unsigned long oldstate)
695  {
696  	return poll_state_synchronize_srcu(srcu_ctlp, oldstate);
697  }
698  
srcu_torture_call(struct rcu_head * head,rcu_callback_t func)699  static void srcu_torture_call(struct rcu_head *head,
700  			      rcu_callback_t func)
701  {
702  	call_srcu(srcu_ctlp, head, func);
703  }
704  
srcu_torture_barrier(void)705  static void srcu_torture_barrier(void)
706  {
707  	srcu_barrier(srcu_ctlp);
708  }
709  
srcu_torture_stats(void)710  static void srcu_torture_stats(void)
711  {
712  	srcu_torture_stats_print(srcu_ctlp, torture_type, TORTURE_FLAG);
713  }
714  
srcu_torture_synchronize_expedited(void)715  static void srcu_torture_synchronize_expedited(void)
716  {
717  	synchronize_srcu_expedited(srcu_ctlp);
718  }
719  
720  static struct rcu_torture_ops srcu_ops = {
721  	.ttype		= SRCU_FLAVOR,
722  	.init		= rcu_sync_torture_init,
723  	.readlock	= srcu_torture_read_lock,
724  	.read_delay	= srcu_read_delay,
725  	.readunlock	= srcu_torture_read_unlock,
726  	.readlock_held	= torture_srcu_read_lock_held,
727  	.get_gp_seq	= srcu_torture_completed,
728  	.deferred_free	= srcu_torture_deferred_free,
729  	.sync		= srcu_torture_synchronize,
730  	.exp_sync	= srcu_torture_synchronize_expedited,
731  	.get_gp_state	= srcu_torture_get_gp_state,
732  	.start_gp_poll	= srcu_torture_start_gp_poll,
733  	.poll_gp_state	= srcu_torture_poll_gp_state,
734  	.call		= srcu_torture_call,
735  	.cb_barrier	= srcu_torture_barrier,
736  	.stats		= srcu_torture_stats,
737  	.cbflood_max	= 50000,
738  	.irq_capable	= 1,
739  	.no_pi_lock	= IS_ENABLED(CONFIG_TINY_SRCU),
740  	.name		= "srcu"
741  };
742  
srcu_torture_init(void)743  static void srcu_torture_init(void)
744  {
745  	rcu_sync_torture_init();
746  	WARN_ON(init_srcu_struct(&srcu_ctld));
747  	srcu_ctlp = &srcu_ctld;
748  }
749  
srcu_torture_cleanup(void)750  static void srcu_torture_cleanup(void)
751  {
752  	cleanup_srcu_struct(&srcu_ctld);
753  	srcu_ctlp = &srcu_ctl; /* In case of a later rcutorture run. */
754  }
755  
756  /* As above, but dynamically allocated. */
757  static struct rcu_torture_ops srcud_ops = {
758  	.ttype		= SRCU_FLAVOR,
759  	.init		= srcu_torture_init,
760  	.cleanup	= srcu_torture_cleanup,
761  	.readlock	= srcu_torture_read_lock,
762  	.read_delay	= srcu_read_delay,
763  	.readunlock	= srcu_torture_read_unlock,
764  	.readlock_held	= torture_srcu_read_lock_held,
765  	.get_gp_seq	= srcu_torture_completed,
766  	.deferred_free	= srcu_torture_deferred_free,
767  	.sync		= srcu_torture_synchronize,
768  	.exp_sync	= srcu_torture_synchronize_expedited,
769  	.get_gp_state	= srcu_torture_get_gp_state,
770  	.start_gp_poll	= srcu_torture_start_gp_poll,
771  	.poll_gp_state	= srcu_torture_poll_gp_state,
772  	.call		= srcu_torture_call,
773  	.cb_barrier	= srcu_torture_barrier,
774  	.stats		= srcu_torture_stats,
775  	.cbflood_max	= 50000,
776  	.irq_capable	= 1,
777  	.no_pi_lock	= IS_ENABLED(CONFIG_TINY_SRCU),
778  	.name		= "srcud"
779  };
780  
781  /* As above, but broken due to inappropriate reader extension. */
782  static struct rcu_torture_ops busted_srcud_ops = {
783  	.ttype		= SRCU_FLAVOR,
784  	.init		= srcu_torture_init,
785  	.cleanup	= srcu_torture_cleanup,
786  	.readlock	= srcu_torture_read_lock,
787  	.read_delay	= rcu_read_delay,
788  	.readunlock	= srcu_torture_read_unlock,
789  	.readlock_held	= torture_srcu_read_lock_held,
790  	.get_gp_seq	= srcu_torture_completed,
791  	.deferred_free	= srcu_torture_deferred_free,
792  	.sync		= srcu_torture_synchronize,
793  	.exp_sync	= srcu_torture_synchronize_expedited,
794  	.call		= srcu_torture_call,
795  	.cb_barrier	= srcu_torture_barrier,
796  	.stats		= srcu_torture_stats,
797  	.irq_capable	= 1,
798  	.no_pi_lock	= IS_ENABLED(CONFIG_TINY_SRCU),
799  	.extendables	= RCUTORTURE_MAX_EXTEND,
800  	.name		= "busted_srcud"
801  };
802  
803  /*
804   * Definitions for trivial CONFIG_PREEMPT=n-only torture testing.
805   * This implementation does not necessarily work well with CPU hotplug.
806   */
807  
synchronize_rcu_trivial(void)808  static void synchronize_rcu_trivial(void)
809  {
810  	int cpu;
811  
812  	for_each_online_cpu(cpu) {
813  		rcutorture_sched_setaffinity(current->pid, cpumask_of(cpu));
814  		WARN_ON_ONCE(raw_smp_processor_id() != cpu);
815  	}
816  }
817  
rcu_torture_read_lock_trivial(void)818  static int rcu_torture_read_lock_trivial(void)
819  {
820  	preempt_disable();
821  	return 0;
822  }
823  
rcu_torture_read_unlock_trivial(int idx)824  static void rcu_torture_read_unlock_trivial(int idx)
825  {
826  	preempt_enable();
827  }
828  
829  static struct rcu_torture_ops trivial_ops = {
830  	.ttype		= RCU_TRIVIAL_FLAVOR,
831  	.init		= rcu_sync_torture_init,
832  	.readlock	= rcu_torture_read_lock_trivial,
833  	.read_delay	= rcu_read_delay,  /* just reuse rcu's version. */
834  	.readunlock	= rcu_torture_read_unlock_trivial,
835  	.readlock_held	= torture_readlock_not_held,
836  	.get_gp_seq	= rcu_no_completed,
837  	.sync		= synchronize_rcu_trivial,
838  	.exp_sync	= synchronize_rcu_trivial,
839  	.fqs		= NULL,
840  	.stats		= NULL,
841  	.irq_capable	= 1,
842  	.name		= "trivial"
843  };
844  
845  #ifdef CONFIG_TASKS_RCU
846  
847  /*
848   * Definitions for RCU-tasks torture testing.
849   */
850  
tasks_torture_read_lock(void)851  static int tasks_torture_read_lock(void)
852  {
853  	return 0;
854  }
855  
tasks_torture_read_unlock(int idx)856  static void tasks_torture_read_unlock(int idx)
857  {
858  }
859  
rcu_tasks_torture_deferred_free(struct rcu_torture * p)860  static void rcu_tasks_torture_deferred_free(struct rcu_torture *p)
861  {
862  	call_rcu_tasks(&p->rtort_rcu, rcu_torture_cb);
863  }
864  
synchronize_rcu_mult_test(void)865  static void synchronize_rcu_mult_test(void)
866  {
867  	synchronize_rcu_mult(call_rcu_tasks, call_rcu_hurry);
868  }
869  
870  static struct rcu_torture_ops tasks_ops = {
871  	.ttype		= RCU_TASKS_FLAVOR,
872  	.init		= rcu_sync_torture_init,
873  	.readlock	= tasks_torture_read_lock,
874  	.read_delay	= rcu_read_delay,  /* just reuse rcu's version. */
875  	.readunlock	= tasks_torture_read_unlock,
876  	.get_gp_seq	= rcu_no_completed,
877  	.deferred_free	= rcu_tasks_torture_deferred_free,
878  	.sync		= synchronize_rcu_tasks,
879  	.exp_sync	= synchronize_rcu_mult_test,
880  	.call		= call_rcu_tasks,
881  	.cb_barrier	= rcu_barrier_tasks,
882  	.gp_kthread_dbg	= show_rcu_tasks_classic_gp_kthread,
883  	.fqs		= NULL,
884  	.stats		= NULL,
885  	.irq_capable	= 1,
886  	.slow_gps	= 1,
887  	.name		= "tasks"
888  };
889  
890  #define TASKS_OPS &tasks_ops,
891  
892  #else // #ifdef CONFIG_TASKS_RCU
893  
894  #define TASKS_OPS
895  
896  #endif // #else #ifdef CONFIG_TASKS_RCU
897  
898  
899  #ifdef CONFIG_TASKS_RUDE_RCU
900  
901  /*
902   * Definitions for rude RCU-tasks torture testing.
903   */
904  
rcu_tasks_rude_torture_deferred_free(struct rcu_torture * p)905  static void rcu_tasks_rude_torture_deferred_free(struct rcu_torture *p)
906  {
907  	call_rcu_tasks_rude(&p->rtort_rcu, rcu_torture_cb);
908  }
909  
910  static struct rcu_torture_ops tasks_rude_ops = {
911  	.ttype		= RCU_TASKS_RUDE_FLAVOR,
912  	.init		= rcu_sync_torture_init,
913  	.readlock	= rcu_torture_read_lock_trivial,
914  	.read_delay	= rcu_read_delay,  /* just reuse rcu's version. */
915  	.readunlock	= rcu_torture_read_unlock_trivial,
916  	.get_gp_seq	= rcu_no_completed,
917  	.deferred_free	= rcu_tasks_rude_torture_deferred_free,
918  	.sync		= synchronize_rcu_tasks_rude,
919  	.exp_sync	= synchronize_rcu_tasks_rude,
920  	.call		= call_rcu_tasks_rude,
921  	.cb_barrier	= rcu_barrier_tasks_rude,
922  	.gp_kthread_dbg	= show_rcu_tasks_rude_gp_kthread,
923  	.cbflood_max	= 50000,
924  	.fqs		= NULL,
925  	.stats		= NULL,
926  	.irq_capable	= 1,
927  	.name		= "tasks-rude"
928  };
929  
930  #define TASKS_RUDE_OPS &tasks_rude_ops,
931  
932  #else // #ifdef CONFIG_TASKS_RUDE_RCU
933  
934  #define TASKS_RUDE_OPS
935  
936  #endif // #else #ifdef CONFIG_TASKS_RUDE_RCU
937  
938  
939  #ifdef CONFIG_TASKS_TRACE_RCU
940  
941  /*
942   * Definitions for tracing RCU-tasks torture testing.
943   */
944  
tasks_tracing_torture_read_lock(void)945  static int tasks_tracing_torture_read_lock(void)
946  {
947  	rcu_read_lock_trace();
948  	return 0;
949  }
950  
tasks_tracing_torture_read_unlock(int idx)951  static void tasks_tracing_torture_read_unlock(int idx)
952  {
953  	rcu_read_unlock_trace();
954  }
955  
rcu_tasks_tracing_torture_deferred_free(struct rcu_torture * p)956  static void rcu_tasks_tracing_torture_deferred_free(struct rcu_torture *p)
957  {
958  	call_rcu_tasks_trace(&p->rtort_rcu, rcu_torture_cb);
959  }
960  
961  static struct rcu_torture_ops tasks_tracing_ops = {
962  	.ttype		= RCU_TASKS_TRACING_FLAVOR,
963  	.init		= rcu_sync_torture_init,
964  	.readlock	= tasks_tracing_torture_read_lock,
965  	.read_delay	= srcu_read_delay,  /* just reuse srcu's version. */
966  	.readunlock	= tasks_tracing_torture_read_unlock,
967  	.readlock_held	= rcu_read_lock_trace_held,
968  	.get_gp_seq	= rcu_no_completed,
969  	.deferred_free	= rcu_tasks_tracing_torture_deferred_free,
970  	.sync		= synchronize_rcu_tasks_trace,
971  	.exp_sync	= synchronize_rcu_tasks_trace,
972  	.call		= call_rcu_tasks_trace,
973  	.cb_barrier	= rcu_barrier_tasks_trace,
974  	.gp_kthread_dbg	= show_rcu_tasks_trace_gp_kthread,
975  	.cbflood_max	= 50000,
976  	.fqs		= NULL,
977  	.stats		= NULL,
978  	.irq_capable	= 1,
979  	.slow_gps	= 1,
980  	.name		= "tasks-tracing"
981  };
982  
983  #define TASKS_TRACING_OPS &tasks_tracing_ops,
984  
985  #else // #ifdef CONFIG_TASKS_TRACE_RCU
986  
987  #define TASKS_TRACING_OPS
988  
989  #endif // #else #ifdef CONFIG_TASKS_TRACE_RCU
990  
991  
rcutorture_seq_diff(unsigned long new,unsigned long old)992  static unsigned long rcutorture_seq_diff(unsigned long new, unsigned long old)
993  {
994  	if (!cur_ops->gp_diff)
995  		return new - old;
996  	return cur_ops->gp_diff(new, old);
997  }
998  
999  /*
1000   * RCU torture priority-boost testing.  Runs one real-time thread per
1001   * CPU for moderate bursts, repeatedly starting grace periods and waiting
1002   * for them to complete.  If a given grace period takes too long, we assume
1003   * that priority inversion has occurred.
1004   */
1005  
1006  static int old_rt_runtime = -1;
1007  
rcu_torture_disable_rt_throttle(void)1008  static void rcu_torture_disable_rt_throttle(void)
1009  {
1010  	/*
1011  	 * Disable RT throttling so that rcutorture's boost threads don't get
1012  	 * throttled. Only possible if rcutorture is built-in otherwise the
1013  	 * user should manually do this by setting the sched_rt_period_us and
1014  	 * sched_rt_runtime sysctls.
1015  	 */
1016  	if (!IS_BUILTIN(CONFIG_RCU_TORTURE_TEST) || old_rt_runtime != -1)
1017  		return;
1018  
1019  	old_rt_runtime = sysctl_sched_rt_runtime;
1020  	sysctl_sched_rt_runtime = -1;
1021  }
1022  
rcu_torture_enable_rt_throttle(void)1023  static void rcu_torture_enable_rt_throttle(void)
1024  {
1025  	if (!IS_BUILTIN(CONFIG_RCU_TORTURE_TEST) || old_rt_runtime == -1)
1026  		return;
1027  
1028  	sysctl_sched_rt_runtime = old_rt_runtime;
1029  	old_rt_runtime = -1;
1030  }
1031  
rcu_torture_boost_failed(unsigned long gp_state,unsigned long * start)1032  static bool rcu_torture_boost_failed(unsigned long gp_state, unsigned long *start)
1033  {
1034  	int cpu;
1035  	static int dbg_done;
1036  	unsigned long end = jiffies;
1037  	bool gp_done;
1038  	unsigned long j;
1039  	static unsigned long last_persist;
1040  	unsigned long lp;
1041  	unsigned long mininterval = test_boost_duration * HZ - HZ / 2;
1042  
1043  	if (end - *start > mininterval) {
1044  		// Recheck after checking time to avoid false positives.
1045  		smp_mb(); // Time check before grace-period check.
1046  		if (cur_ops->poll_gp_state(gp_state))
1047  			return false; // passed, though perhaps just barely
1048  		if (cur_ops->check_boost_failed && !cur_ops->check_boost_failed(gp_state, &cpu)) {
1049  			// At most one persisted message per boost test.
1050  			j = jiffies;
1051  			lp = READ_ONCE(last_persist);
1052  			if (time_after(j, lp + mininterval) && cmpxchg(&last_persist, lp, j) == lp)
1053  				pr_info("Boost inversion persisted: No QS from CPU %d\n", cpu);
1054  			return false; // passed on a technicality
1055  		}
1056  		VERBOSE_TOROUT_STRING("rcu_torture_boost boosting failed");
1057  		n_rcu_torture_boost_failure++;
1058  		if (!xchg(&dbg_done, 1) && cur_ops->gp_kthread_dbg) {
1059  			pr_info("Boost inversion thread ->rt_priority %u gp_state %lu jiffies %lu\n",
1060  				current->rt_priority, gp_state, end - *start);
1061  			cur_ops->gp_kthread_dbg();
1062  			// Recheck after print to flag grace period ending during splat.
1063  			gp_done = cur_ops->poll_gp_state(gp_state);
1064  			pr_info("Boost inversion: GP %lu %s.\n", gp_state,
1065  				gp_done ? "ended already" : "still pending");
1066  
1067  		}
1068  
1069  		return true; // failed
1070  	} else if (cur_ops->check_boost_failed && !cur_ops->check_boost_failed(gp_state, NULL)) {
1071  		*start = jiffies;
1072  	}
1073  
1074  	return false; // passed
1075  }
1076  
rcu_torture_boost(void * arg)1077  static int rcu_torture_boost(void *arg)
1078  {
1079  	unsigned long endtime;
1080  	unsigned long gp_state;
1081  	unsigned long gp_state_time;
1082  	unsigned long oldstarttime;
1083  
1084  	VERBOSE_TOROUT_STRING("rcu_torture_boost started");
1085  
1086  	/* Set real-time priority. */
1087  	sched_set_fifo_low(current);
1088  
1089  	/* Each pass through the following loop does one boost-test cycle. */
1090  	do {
1091  		bool failed = false; // Test failed already in this test interval
1092  		bool gp_initiated = false;
1093  
1094  		if (kthread_should_stop())
1095  			goto checkwait;
1096  
1097  		/* Wait for the next test interval. */
1098  		oldstarttime = READ_ONCE(boost_starttime);
1099  		while (time_before(jiffies, oldstarttime)) {
1100  			schedule_timeout_interruptible(oldstarttime - jiffies);
1101  			if (stutter_wait("rcu_torture_boost"))
1102  				sched_set_fifo_low(current);
1103  			if (torture_must_stop())
1104  				goto checkwait;
1105  		}
1106  
1107  		// Do one boost-test interval.
1108  		endtime = oldstarttime + test_boost_duration * HZ;
1109  		while (time_before(jiffies, endtime)) {
1110  			// Has current GP gone too long?
1111  			if (gp_initiated && !failed && !cur_ops->poll_gp_state(gp_state))
1112  				failed = rcu_torture_boost_failed(gp_state, &gp_state_time);
1113  			// If we don't have a grace period in flight, start one.
1114  			if (!gp_initiated || cur_ops->poll_gp_state(gp_state)) {
1115  				gp_state = cur_ops->start_gp_poll();
1116  				gp_initiated = true;
1117  				gp_state_time = jiffies;
1118  			}
1119  			if (stutter_wait("rcu_torture_boost")) {
1120  				sched_set_fifo_low(current);
1121  				// If the grace period already ended,
1122  				// we don't know when that happened, so
1123  				// start over.
1124  				if (cur_ops->poll_gp_state(gp_state))
1125  					gp_initiated = false;
1126  			}
1127  			if (torture_must_stop())
1128  				goto checkwait;
1129  		}
1130  
1131  		// In case the grace period extended beyond the end of the loop.
1132  		if (gp_initiated && !failed && !cur_ops->poll_gp_state(gp_state))
1133  			rcu_torture_boost_failed(gp_state, &gp_state_time);
1134  
1135  		/*
1136  		 * Set the start time of the next test interval.
1137  		 * Yes, this is vulnerable to long delays, but such
1138  		 * delays simply cause a false negative for the next
1139  		 * interval.  Besides, we are running at RT priority,
1140  		 * so delays should be relatively rare.
1141  		 */
1142  		while (oldstarttime == READ_ONCE(boost_starttime) && !kthread_should_stop()) {
1143  			if (mutex_trylock(&boost_mutex)) {
1144  				if (oldstarttime == boost_starttime) {
1145  					WRITE_ONCE(boost_starttime,
1146  						   jiffies + test_boost_interval * HZ);
1147  					n_rcu_torture_boosts++;
1148  				}
1149  				mutex_unlock(&boost_mutex);
1150  				break;
1151  			}
1152  			schedule_timeout_uninterruptible(1);
1153  		}
1154  
1155  		/* Go do the stutter. */
1156  checkwait:	if (stutter_wait("rcu_torture_boost"))
1157  			sched_set_fifo_low(current);
1158  	} while (!torture_must_stop());
1159  
1160  	/* Clean up and exit. */
1161  	while (!kthread_should_stop()) {
1162  		torture_shutdown_absorb("rcu_torture_boost");
1163  		schedule_timeout_uninterruptible(1);
1164  	}
1165  	torture_kthread_stopping("rcu_torture_boost");
1166  	return 0;
1167  }
1168  
1169  /*
1170   * RCU torture force-quiescent-state kthread.  Repeatedly induces
1171   * bursts of calls to force_quiescent_state(), increasing the probability
1172   * of occurrence of some important types of race conditions.
1173   */
1174  static int
rcu_torture_fqs(void * arg)1175  rcu_torture_fqs(void *arg)
1176  {
1177  	unsigned long fqs_resume_time;
1178  	int fqs_burst_remaining;
1179  	int oldnice = task_nice(current);
1180  
1181  	VERBOSE_TOROUT_STRING("rcu_torture_fqs task started");
1182  	do {
1183  		fqs_resume_time = jiffies + fqs_stutter * HZ;
1184  		while (time_before(jiffies, fqs_resume_time) &&
1185  		       !kthread_should_stop()) {
1186  			schedule_timeout_interruptible(1);
1187  		}
1188  		fqs_burst_remaining = fqs_duration;
1189  		while (fqs_burst_remaining > 0 &&
1190  		       !kthread_should_stop()) {
1191  			cur_ops->fqs();
1192  			udelay(fqs_holdoff);
1193  			fqs_burst_remaining -= fqs_holdoff;
1194  		}
1195  		if (stutter_wait("rcu_torture_fqs"))
1196  			sched_set_normal(current, oldnice);
1197  	} while (!torture_must_stop());
1198  	torture_kthread_stopping("rcu_torture_fqs");
1199  	return 0;
1200  }
1201  
1202  // Used by writers to randomly choose from the available grace-period primitives.
1203  static int synctype[ARRAY_SIZE(rcu_torture_writer_state_names)] = { };
1204  static int nsynctypes;
1205  
1206  /*
1207   * Determine which grace-period primitives are available.
1208   */
rcu_torture_write_types(void)1209  static void rcu_torture_write_types(void)
1210  {
1211  	bool gp_cond1 = gp_cond, gp_cond_exp1 = gp_cond_exp, gp_cond_full1 = gp_cond_full;
1212  	bool gp_cond_exp_full1 = gp_cond_exp_full, gp_exp1 = gp_exp, gp_poll_exp1 = gp_poll_exp;
1213  	bool gp_poll_exp_full1 = gp_poll_exp_full, gp_normal1 = gp_normal, gp_poll1 = gp_poll;
1214  	bool gp_poll_full1 = gp_poll_full, gp_sync1 = gp_sync;
1215  
1216  	/* Initialize synctype[] array.  If none set, take default. */
1217  	if (!gp_cond1 &&
1218  	    !gp_cond_exp1 &&
1219  	    !gp_cond_full1 &&
1220  	    !gp_cond_exp_full1 &&
1221  	    !gp_exp1 &&
1222  	    !gp_poll_exp1 &&
1223  	    !gp_poll_exp_full1 &&
1224  	    !gp_normal1 &&
1225  	    !gp_poll1 &&
1226  	    !gp_poll_full1 &&
1227  	    !gp_sync1) {
1228  		gp_cond1 = true;
1229  		gp_cond_exp1 = true;
1230  		gp_cond_full1 = true;
1231  		gp_cond_exp_full1 = true;
1232  		gp_exp1 = true;
1233  		gp_poll_exp1 = true;
1234  		gp_poll_exp_full1 = true;
1235  		gp_normal1 = true;
1236  		gp_poll1 = true;
1237  		gp_poll_full1 = true;
1238  		gp_sync1 = true;
1239  	}
1240  	if (gp_cond1 && cur_ops->get_gp_state && cur_ops->cond_sync) {
1241  		synctype[nsynctypes++] = RTWS_COND_GET;
1242  		pr_info("%s: Testing conditional GPs.\n", __func__);
1243  	} else if (gp_cond && (!cur_ops->get_gp_state || !cur_ops->cond_sync)) {
1244  		pr_alert("%s: gp_cond without primitives.\n", __func__);
1245  	}
1246  	if (gp_cond_exp1 && cur_ops->get_gp_state_exp && cur_ops->cond_sync_exp) {
1247  		synctype[nsynctypes++] = RTWS_COND_GET_EXP;
1248  		pr_info("%s: Testing conditional expedited GPs.\n", __func__);
1249  	} else if (gp_cond_exp && (!cur_ops->get_gp_state_exp || !cur_ops->cond_sync_exp)) {
1250  		pr_alert("%s: gp_cond_exp without primitives.\n", __func__);
1251  	}
1252  	if (gp_cond_full1 && cur_ops->get_gp_state && cur_ops->cond_sync_full) {
1253  		synctype[nsynctypes++] = RTWS_COND_GET_FULL;
1254  		pr_info("%s: Testing conditional full-state GPs.\n", __func__);
1255  	} else if (gp_cond_full && (!cur_ops->get_gp_state || !cur_ops->cond_sync_full)) {
1256  		pr_alert("%s: gp_cond_full without primitives.\n", __func__);
1257  	}
1258  	if (gp_cond_exp_full1 && cur_ops->get_gp_state_exp && cur_ops->cond_sync_exp_full) {
1259  		synctype[nsynctypes++] = RTWS_COND_GET_EXP_FULL;
1260  		pr_info("%s: Testing conditional full-state expedited GPs.\n", __func__);
1261  	} else if (gp_cond_exp_full &&
1262  		   (!cur_ops->get_gp_state_exp || !cur_ops->cond_sync_exp_full)) {
1263  		pr_alert("%s: gp_cond_exp_full without primitives.\n", __func__);
1264  	}
1265  	if (gp_exp1 && cur_ops->exp_sync) {
1266  		synctype[nsynctypes++] = RTWS_EXP_SYNC;
1267  		pr_info("%s: Testing expedited GPs.\n", __func__);
1268  	} else if (gp_exp && !cur_ops->exp_sync) {
1269  		pr_alert("%s: gp_exp without primitives.\n", __func__);
1270  	}
1271  	if (gp_normal1 && cur_ops->deferred_free) {
1272  		synctype[nsynctypes++] = RTWS_DEF_FREE;
1273  		pr_info("%s: Testing asynchronous GPs.\n", __func__);
1274  	} else if (gp_normal && !cur_ops->deferred_free) {
1275  		pr_alert("%s: gp_normal without primitives.\n", __func__);
1276  	}
1277  	if (gp_poll1 && cur_ops->get_comp_state && cur_ops->same_gp_state &&
1278  	    cur_ops->start_gp_poll && cur_ops->poll_gp_state) {
1279  		synctype[nsynctypes++] = RTWS_POLL_GET;
1280  		pr_info("%s: Testing polling GPs.\n", __func__);
1281  	} else if (gp_poll && (!cur_ops->start_gp_poll || !cur_ops->poll_gp_state)) {
1282  		pr_alert("%s: gp_poll without primitives.\n", __func__);
1283  	}
1284  	if (gp_poll_full1 && cur_ops->get_comp_state_full && cur_ops->same_gp_state_full
1285  	    && cur_ops->start_gp_poll_full && cur_ops->poll_gp_state_full) {
1286  		synctype[nsynctypes++] = RTWS_POLL_GET_FULL;
1287  		pr_info("%s: Testing polling full-state GPs.\n", __func__);
1288  	} else if (gp_poll_full && (!cur_ops->start_gp_poll_full || !cur_ops->poll_gp_state_full)) {
1289  		pr_alert("%s: gp_poll_full without primitives.\n", __func__);
1290  	}
1291  	if (gp_poll_exp1 && cur_ops->start_gp_poll_exp && cur_ops->poll_gp_state_exp) {
1292  		synctype[nsynctypes++] = RTWS_POLL_GET_EXP;
1293  		pr_info("%s: Testing polling expedited GPs.\n", __func__);
1294  	} else if (gp_poll_exp && (!cur_ops->start_gp_poll_exp || !cur_ops->poll_gp_state_exp)) {
1295  		pr_alert("%s: gp_poll_exp without primitives.\n", __func__);
1296  	}
1297  	if (gp_poll_exp_full1 && cur_ops->start_gp_poll_exp_full && cur_ops->poll_gp_state_full) {
1298  		synctype[nsynctypes++] = RTWS_POLL_GET_EXP_FULL;
1299  		pr_info("%s: Testing polling full-state expedited GPs.\n", __func__);
1300  	} else if (gp_poll_exp_full &&
1301  		   (!cur_ops->start_gp_poll_exp_full || !cur_ops->poll_gp_state_full)) {
1302  		pr_alert("%s: gp_poll_exp_full without primitives.\n", __func__);
1303  	}
1304  	if (gp_sync1 && cur_ops->sync) {
1305  		synctype[nsynctypes++] = RTWS_SYNC;
1306  		pr_info("%s: Testing normal GPs.\n", __func__);
1307  	} else if (gp_sync && !cur_ops->sync) {
1308  		pr_alert("%s: gp_sync without primitives.\n", __func__);
1309  	}
1310  }
1311  
1312  /*
1313   * Do the specified rcu_torture_writer() synchronous grace period,
1314   * while also testing out the polled APIs.  Note well that the single-CPU
1315   * grace-period optimizations must be accounted for.
1316   */
do_rtws_sync(struct torture_random_state * trsp,void (* sync)(void))1317  static void do_rtws_sync(struct torture_random_state *trsp, void (*sync)(void))
1318  {
1319  	unsigned long cookie;
1320  	struct rcu_gp_oldstate cookie_full;
1321  	bool dopoll;
1322  	bool dopoll_full;
1323  	unsigned long r = torture_random(trsp);
1324  
1325  	dopoll = cur_ops->get_gp_state && cur_ops->poll_gp_state && !(r & 0x300);
1326  	dopoll_full = cur_ops->get_gp_state_full && cur_ops->poll_gp_state_full && !(r & 0xc00);
1327  	if (dopoll || dopoll_full)
1328  		cpus_read_lock();
1329  	if (dopoll)
1330  		cookie = cur_ops->get_gp_state();
1331  	if (dopoll_full)
1332  		cur_ops->get_gp_state_full(&cookie_full);
1333  	if (cur_ops->poll_need_2gp && cur_ops->poll_need_2gp(dopoll, dopoll_full))
1334  		sync();
1335  	sync();
1336  	WARN_ONCE(dopoll && !cur_ops->poll_gp_state(cookie),
1337  		  "%s: Cookie check 3 failed %pS() online %*pbl.",
1338  		  __func__, sync, cpumask_pr_args(cpu_online_mask));
1339  	WARN_ONCE(dopoll_full && !cur_ops->poll_gp_state_full(&cookie_full),
1340  		  "%s: Cookie check 4 failed %pS() online %*pbl",
1341  		  __func__, sync, cpumask_pr_args(cpu_online_mask));
1342  	if (dopoll || dopoll_full)
1343  		cpus_read_unlock();
1344  }
1345  
1346  /*
1347   * RCU torture writer kthread.  Repeatedly substitutes a new structure
1348   * for that pointed to by rcu_torture_current, freeing the old structure
1349   * after a series of grace periods (the "pipeline").
1350   */
1351  static int
rcu_torture_writer(void * arg)1352  rcu_torture_writer(void *arg)
1353  {
1354  	bool boot_ended;
1355  	bool can_expedite = !rcu_gp_is_expedited() && !rcu_gp_is_normal();
1356  	unsigned long cookie;
1357  	struct rcu_gp_oldstate cookie_full;
1358  	int expediting = 0;
1359  	unsigned long gp_snap;
1360  	unsigned long gp_snap1;
1361  	struct rcu_gp_oldstate gp_snap_full;
1362  	struct rcu_gp_oldstate gp_snap1_full;
1363  	int i;
1364  	int idx;
1365  	int oldnice = task_nice(current);
1366  	struct rcu_gp_oldstate rgo[NUM_ACTIVE_RCU_POLL_FULL_OLDSTATE];
1367  	struct rcu_torture *rp;
1368  	struct rcu_torture *old_rp;
1369  	static DEFINE_TORTURE_RANDOM(rand);
1370  	bool stutter_waited;
1371  	unsigned long ulo[NUM_ACTIVE_RCU_POLL_OLDSTATE];
1372  
1373  	VERBOSE_TOROUT_STRING("rcu_torture_writer task started");
1374  	if (!can_expedite)
1375  		pr_alert("%s" TORTURE_FLAG
1376  			 " GP expediting controlled from boot/sysfs for %s.\n",
1377  			 torture_type, cur_ops->name);
1378  	if (WARN_ONCE(nsynctypes == 0,
1379  		      "%s: No update-side primitives.\n", __func__)) {
1380  		/*
1381  		 * No updates primitives, so don't try updating.
1382  		 * The resulting test won't be testing much, hence the
1383  		 * above WARN_ONCE().
1384  		 */
1385  		rcu_torture_writer_state = RTWS_STOPPING;
1386  		torture_kthread_stopping("rcu_torture_writer");
1387  		return 0;
1388  	}
1389  
1390  	do {
1391  		rcu_torture_writer_state = RTWS_FIXED_DELAY;
1392  		torture_hrtimeout_us(500, 1000, &rand);
1393  		rp = rcu_torture_alloc();
1394  		if (rp == NULL)
1395  			continue;
1396  		rp->rtort_pipe_count = 0;
1397  		rcu_torture_writer_state = RTWS_DELAY;
1398  		udelay(torture_random(&rand) & 0x3ff);
1399  		rcu_torture_writer_state = RTWS_REPLACE;
1400  		old_rp = rcu_dereference_check(rcu_torture_current,
1401  					       current == writer_task);
1402  		rp->rtort_mbtest = 1;
1403  		rcu_assign_pointer(rcu_torture_current, rp);
1404  		smp_wmb(); /* Mods to old_rp must follow rcu_assign_pointer() */
1405  		if (old_rp) {
1406  			i = old_rp->rtort_pipe_count;
1407  			if (i > RCU_TORTURE_PIPE_LEN)
1408  				i = RCU_TORTURE_PIPE_LEN;
1409  			atomic_inc(&rcu_torture_wcount[i]);
1410  			WRITE_ONCE(old_rp->rtort_pipe_count,
1411  				   old_rp->rtort_pipe_count + 1);
1412  
1413  			// Make sure readers block polled grace periods.
1414  			if (cur_ops->get_gp_state && cur_ops->poll_gp_state) {
1415  				idx = cur_ops->readlock();
1416  				cookie = cur_ops->get_gp_state();
1417  				WARN_ONCE(cur_ops->poll_gp_state(cookie),
1418  					  "%s: Cookie check 1 failed %s(%d) %lu->%lu\n",
1419  					  __func__,
1420  					  rcu_torture_writer_state_getname(),
1421  					  rcu_torture_writer_state,
1422  					  cookie, cur_ops->get_gp_state());
1423  				if (cur_ops->get_gp_completed) {
1424  					cookie = cur_ops->get_gp_completed();
1425  					WARN_ON_ONCE(!cur_ops->poll_gp_state(cookie));
1426  				}
1427  				cur_ops->readunlock(idx);
1428  			}
1429  			if (cur_ops->get_gp_state_full && cur_ops->poll_gp_state_full) {
1430  				idx = cur_ops->readlock();
1431  				cur_ops->get_gp_state_full(&cookie_full);
1432  				WARN_ONCE(cur_ops->poll_gp_state_full(&cookie_full),
1433  					  "%s: Cookie check 5 failed %s(%d) online %*pbl\n",
1434  					  __func__,
1435  					  rcu_torture_writer_state_getname(),
1436  					  rcu_torture_writer_state,
1437  					  cpumask_pr_args(cpu_online_mask));
1438  				if (cur_ops->get_gp_completed_full) {
1439  					cur_ops->get_gp_completed_full(&cookie_full);
1440  					WARN_ON_ONCE(!cur_ops->poll_gp_state_full(&cookie_full));
1441  				}
1442  				cur_ops->readunlock(idx);
1443  			}
1444  			switch (synctype[torture_random(&rand) % nsynctypes]) {
1445  			case RTWS_DEF_FREE:
1446  				rcu_torture_writer_state = RTWS_DEF_FREE;
1447  				cur_ops->deferred_free(old_rp);
1448  				break;
1449  			case RTWS_EXP_SYNC:
1450  				rcu_torture_writer_state = RTWS_EXP_SYNC;
1451  				do_rtws_sync(&rand, cur_ops->exp_sync);
1452  				rcu_torture_pipe_update(old_rp);
1453  				break;
1454  			case RTWS_COND_GET:
1455  				rcu_torture_writer_state = RTWS_COND_GET;
1456  				gp_snap = cur_ops->get_gp_state();
1457  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1458  				rcu_torture_writer_state = RTWS_COND_SYNC;
1459  				cur_ops->cond_sync(gp_snap);
1460  				rcu_torture_pipe_update(old_rp);
1461  				break;
1462  			case RTWS_COND_GET_EXP:
1463  				rcu_torture_writer_state = RTWS_COND_GET_EXP;
1464  				gp_snap = cur_ops->get_gp_state_exp();
1465  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1466  				rcu_torture_writer_state = RTWS_COND_SYNC_EXP;
1467  				cur_ops->cond_sync_exp(gp_snap);
1468  				rcu_torture_pipe_update(old_rp);
1469  				break;
1470  			case RTWS_COND_GET_FULL:
1471  				rcu_torture_writer_state = RTWS_COND_GET_FULL;
1472  				cur_ops->get_gp_state_full(&gp_snap_full);
1473  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1474  				rcu_torture_writer_state = RTWS_COND_SYNC_FULL;
1475  				cur_ops->cond_sync_full(&gp_snap_full);
1476  				rcu_torture_pipe_update(old_rp);
1477  				break;
1478  			case RTWS_COND_GET_EXP_FULL:
1479  				rcu_torture_writer_state = RTWS_COND_GET_EXP_FULL;
1480  				cur_ops->get_gp_state_full(&gp_snap_full);
1481  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1482  				rcu_torture_writer_state = RTWS_COND_SYNC_EXP_FULL;
1483  				cur_ops->cond_sync_exp_full(&gp_snap_full);
1484  				rcu_torture_pipe_update(old_rp);
1485  				break;
1486  			case RTWS_POLL_GET:
1487  				rcu_torture_writer_state = RTWS_POLL_GET;
1488  				for (i = 0; i < ARRAY_SIZE(ulo); i++)
1489  					ulo[i] = cur_ops->get_comp_state();
1490  				gp_snap = cur_ops->start_gp_poll();
1491  				rcu_torture_writer_state = RTWS_POLL_WAIT;
1492  				while (!cur_ops->poll_gp_state(gp_snap)) {
1493  					gp_snap1 = cur_ops->get_gp_state();
1494  					for (i = 0; i < ARRAY_SIZE(ulo); i++)
1495  						if (cur_ops->poll_gp_state(ulo[i]) ||
1496  						    cur_ops->same_gp_state(ulo[i], gp_snap1)) {
1497  							ulo[i] = gp_snap1;
1498  							break;
1499  						}
1500  					WARN_ON_ONCE(i >= ARRAY_SIZE(ulo));
1501  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1502  								  &rand);
1503  				}
1504  				rcu_torture_pipe_update(old_rp);
1505  				break;
1506  			case RTWS_POLL_GET_FULL:
1507  				rcu_torture_writer_state = RTWS_POLL_GET_FULL;
1508  				for (i = 0; i < ARRAY_SIZE(rgo); i++)
1509  					cur_ops->get_comp_state_full(&rgo[i]);
1510  				cur_ops->start_gp_poll_full(&gp_snap_full);
1511  				rcu_torture_writer_state = RTWS_POLL_WAIT_FULL;
1512  				while (!cur_ops->poll_gp_state_full(&gp_snap_full)) {
1513  					cur_ops->get_gp_state_full(&gp_snap1_full);
1514  					for (i = 0; i < ARRAY_SIZE(rgo); i++)
1515  						if (cur_ops->poll_gp_state_full(&rgo[i]) ||
1516  						    cur_ops->same_gp_state_full(&rgo[i],
1517  										&gp_snap1_full)) {
1518  							rgo[i] = gp_snap1_full;
1519  							break;
1520  						}
1521  					WARN_ON_ONCE(i >= ARRAY_SIZE(rgo));
1522  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1523  								  &rand);
1524  				}
1525  				rcu_torture_pipe_update(old_rp);
1526  				break;
1527  			case RTWS_POLL_GET_EXP:
1528  				rcu_torture_writer_state = RTWS_POLL_GET_EXP;
1529  				gp_snap = cur_ops->start_gp_poll_exp();
1530  				rcu_torture_writer_state = RTWS_POLL_WAIT_EXP;
1531  				while (!cur_ops->poll_gp_state_exp(gp_snap))
1532  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1533  								  &rand);
1534  				rcu_torture_pipe_update(old_rp);
1535  				break;
1536  			case RTWS_POLL_GET_EXP_FULL:
1537  				rcu_torture_writer_state = RTWS_POLL_GET_EXP_FULL;
1538  				cur_ops->start_gp_poll_exp_full(&gp_snap_full);
1539  				rcu_torture_writer_state = RTWS_POLL_WAIT_EXP_FULL;
1540  				while (!cur_ops->poll_gp_state_full(&gp_snap_full))
1541  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1542  								  &rand);
1543  				rcu_torture_pipe_update(old_rp);
1544  				break;
1545  			case RTWS_SYNC:
1546  				rcu_torture_writer_state = RTWS_SYNC;
1547  				do_rtws_sync(&rand, cur_ops->sync);
1548  				rcu_torture_pipe_update(old_rp);
1549  				break;
1550  			default:
1551  				WARN_ON_ONCE(1);
1552  				break;
1553  			}
1554  		}
1555  		WRITE_ONCE(rcu_torture_current_version,
1556  			   rcu_torture_current_version + 1);
1557  		/* Cycle through nesting levels of rcu_expedite_gp() calls. */
1558  		if (can_expedite &&
1559  		    !(torture_random(&rand) & 0xff & (!!expediting - 1))) {
1560  			WARN_ON_ONCE(expediting == 0 && rcu_gp_is_expedited());
1561  			if (expediting >= 0)
1562  				rcu_expedite_gp();
1563  			else
1564  				rcu_unexpedite_gp();
1565  			if (++expediting > 3)
1566  				expediting = -expediting;
1567  		} else if (!can_expedite) { /* Disabled during boot, recheck. */
1568  			can_expedite = !rcu_gp_is_expedited() &&
1569  				       !rcu_gp_is_normal();
1570  		}
1571  		rcu_torture_writer_state = RTWS_STUTTER;
1572  		boot_ended = rcu_inkernel_boot_has_ended();
1573  		stutter_waited = stutter_wait("rcu_torture_writer");
1574  		if (stutter_waited &&
1575  		    !atomic_read(&rcu_fwd_cb_nodelay) &&
1576  		    !cur_ops->slow_gps &&
1577  		    !torture_must_stop() &&
1578  		    boot_ended)
1579  			for (i = 0; i < ARRAY_SIZE(rcu_tortures); i++)
1580  				if (list_empty(&rcu_tortures[i].rtort_free) &&
1581  				    rcu_access_pointer(rcu_torture_current) !=
1582  				    &rcu_tortures[i]) {
1583  					tracing_off();
1584  					show_rcu_gp_kthreads();
1585  					WARN(1, "%s: rtort_pipe_count: %d\n", __func__, rcu_tortures[i].rtort_pipe_count);
1586  					rcu_ftrace_dump(DUMP_ALL);
1587  				}
1588  		if (stutter_waited)
1589  			sched_set_normal(current, oldnice);
1590  	} while (!torture_must_stop());
1591  	rcu_torture_current = NULL;  // Let stats task know that we are done.
1592  	/* Reset expediting back to unexpedited. */
1593  	if (expediting > 0)
1594  		expediting = -expediting;
1595  	while (can_expedite && expediting++ < 0)
1596  		rcu_unexpedite_gp();
1597  	WARN_ON_ONCE(can_expedite && rcu_gp_is_expedited());
1598  	if (!can_expedite)
1599  		pr_alert("%s" TORTURE_FLAG
1600  			 " Dynamic grace-period expediting was disabled.\n",
1601  			 torture_type);
1602  	rcu_torture_writer_state = RTWS_STOPPING;
1603  	torture_kthread_stopping("rcu_torture_writer");
1604  	return 0;
1605  }
1606  
1607  /*
1608   * RCU torture fake writer kthread.  Repeatedly calls sync, with a random
1609   * delay between calls.
1610   */
1611  static int
rcu_torture_fakewriter(void * arg)1612  rcu_torture_fakewriter(void *arg)
1613  {
1614  	unsigned long gp_snap;
1615  	struct rcu_gp_oldstate gp_snap_full;
1616  	DEFINE_TORTURE_RANDOM(rand);
1617  
1618  	VERBOSE_TOROUT_STRING("rcu_torture_fakewriter task started");
1619  	set_user_nice(current, MAX_NICE);
1620  
1621  	if (WARN_ONCE(nsynctypes == 0,
1622  		      "%s: No update-side primitives.\n", __func__)) {
1623  		/*
1624  		 * No updates primitives, so don't try updating.
1625  		 * The resulting test won't be testing much, hence the
1626  		 * above WARN_ONCE().
1627  		 */
1628  		torture_kthread_stopping("rcu_torture_fakewriter");
1629  		return 0;
1630  	}
1631  
1632  	do {
1633  		torture_hrtimeout_jiffies(torture_random(&rand) % 10, &rand);
1634  		if (cur_ops->cb_barrier != NULL &&
1635  		    torture_random(&rand) % (nfakewriters * 8) == 0) {
1636  			cur_ops->cb_barrier();
1637  		} else {
1638  			switch (synctype[torture_random(&rand) % nsynctypes]) {
1639  			case RTWS_DEF_FREE:
1640  				break;
1641  			case RTWS_EXP_SYNC:
1642  				cur_ops->exp_sync();
1643  				break;
1644  			case RTWS_COND_GET:
1645  				gp_snap = cur_ops->get_gp_state();
1646  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1647  				cur_ops->cond_sync(gp_snap);
1648  				break;
1649  			case RTWS_COND_GET_EXP:
1650  				gp_snap = cur_ops->get_gp_state_exp();
1651  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1652  				cur_ops->cond_sync_exp(gp_snap);
1653  				break;
1654  			case RTWS_COND_GET_FULL:
1655  				cur_ops->get_gp_state_full(&gp_snap_full);
1656  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1657  				cur_ops->cond_sync_full(&gp_snap_full);
1658  				break;
1659  			case RTWS_COND_GET_EXP_FULL:
1660  				cur_ops->get_gp_state_full(&gp_snap_full);
1661  				torture_hrtimeout_jiffies(torture_random(&rand) % 16, &rand);
1662  				cur_ops->cond_sync_exp_full(&gp_snap_full);
1663  				break;
1664  			case RTWS_POLL_GET:
1665  				gp_snap = cur_ops->start_gp_poll();
1666  				while (!cur_ops->poll_gp_state(gp_snap)) {
1667  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1668  								  &rand);
1669  				}
1670  				break;
1671  			case RTWS_POLL_GET_FULL:
1672  				cur_ops->start_gp_poll_full(&gp_snap_full);
1673  				while (!cur_ops->poll_gp_state_full(&gp_snap_full)) {
1674  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1675  								  &rand);
1676  				}
1677  				break;
1678  			case RTWS_POLL_GET_EXP:
1679  				gp_snap = cur_ops->start_gp_poll_exp();
1680  				while (!cur_ops->poll_gp_state_exp(gp_snap)) {
1681  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1682  								  &rand);
1683  				}
1684  				break;
1685  			case RTWS_POLL_GET_EXP_FULL:
1686  				cur_ops->start_gp_poll_exp_full(&gp_snap_full);
1687  				while (!cur_ops->poll_gp_state_full(&gp_snap_full)) {
1688  					torture_hrtimeout_jiffies(torture_random(&rand) % 16,
1689  								  &rand);
1690  				}
1691  				break;
1692  			case RTWS_SYNC:
1693  				cur_ops->sync();
1694  				break;
1695  			default:
1696  				WARN_ON_ONCE(1);
1697  				break;
1698  			}
1699  		}
1700  		stutter_wait("rcu_torture_fakewriter");
1701  	} while (!torture_must_stop());
1702  
1703  	torture_kthread_stopping("rcu_torture_fakewriter");
1704  	return 0;
1705  }
1706  
rcu_torture_timer_cb(struct rcu_head * rhp)1707  static void rcu_torture_timer_cb(struct rcu_head *rhp)
1708  {
1709  	kfree(rhp);
1710  }
1711  
1712  // Set up and carry out testing of RCU's global memory ordering
rcu_torture_reader_do_mbchk(long myid,struct rcu_torture * rtp,struct torture_random_state * trsp)1713  static void rcu_torture_reader_do_mbchk(long myid, struct rcu_torture *rtp,
1714  					struct torture_random_state *trsp)
1715  {
1716  	unsigned long loops;
1717  	int noc = torture_num_online_cpus();
1718  	int rdrchked;
1719  	int rdrchker;
1720  	struct rcu_torture_reader_check *rtrcp; // Me.
1721  	struct rcu_torture_reader_check *rtrcp_assigner; // Assigned us to do checking.
1722  	struct rcu_torture_reader_check *rtrcp_chked; // Reader being checked.
1723  	struct rcu_torture_reader_check *rtrcp_chker; // Reader doing checking when not me.
1724  
1725  	if (myid < 0)
1726  		return; // Don't try this from timer handlers.
1727  
1728  	// Increment my counter.
1729  	rtrcp = &rcu_torture_reader_mbchk[myid];
1730  	WRITE_ONCE(rtrcp->rtc_myloops, rtrcp->rtc_myloops + 1);
1731  
1732  	// Attempt to assign someone else some checking work.
1733  	rdrchked = torture_random(trsp) % nrealreaders;
1734  	rtrcp_chked = &rcu_torture_reader_mbchk[rdrchked];
1735  	rdrchker = torture_random(trsp) % nrealreaders;
1736  	rtrcp_chker = &rcu_torture_reader_mbchk[rdrchker];
1737  	if (rdrchked != myid && rdrchked != rdrchker && noc >= rdrchked && noc >= rdrchker &&
1738  	    smp_load_acquire(&rtrcp->rtc_chkrdr) < 0 && // Pairs with smp_store_release below.
1739  	    !READ_ONCE(rtp->rtort_chkp) &&
1740  	    !smp_load_acquire(&rtrcp_chker->rtc_assigner)) { // Pairs with smp_store_release below.
1741  		rtrcp->rtc_chkloops = READ_ONCE(rtrcp_chked->rtc_myloops);
1742  		WARN_ON_ONCE(rtrcp->rtc_chkrdr >= 0);
1743  		rtrcp->rtc_chkrdr = rdrchked;
1744  		WARN_ON_ONCE(rtrcp->rtc_ready); // This gets set after the grace period ends.
1745  		if (cmpxchg_relaxed(&rtrcp_chker->rtc_assigner, NULL, rtrcp) ||
1746  		    cmpxchg_relaxed(&rtp->rtort_chkp, NULL, rtrcp))
1747  			(void)cmpxchg_relaxed(&rtrcp_chker->rtc_assigner, rtrcp, NULL); // Back out.
1748  	}
1749  
1750  	// If assigned some completed work, do it!
1751  	rtrcp_assigner = READ_ONCE(rtrcp->rtc_assigner);
1752  	if (!rtrcp_assigner || !smp_load_acquire(&rtrcp_assigner->rtc_ready))
1753  		return; // No work or work not yet ready.
1754  	rdrchked = rtrcp_assigner->rtc_chkrdr;
1755  	if (WARN_ON_ONCE(rdrchked < 0))
1756  		return;
1757  	rtrcp_chked = &rcu_torture_reader_mbchk[rdrchked];
1758  	loops = READ_ONCE(rtrcp_chked->rtc_myloops);
1759  	atomic_inc(&n_rcu_torture_mbchk_tries);
1760  	if (ULONG_CMP_LT(loops, rtrcp_assigner->rtc_chkloops))
1761  		atomic_inc(&n_rcu_torture_mbchk_fail);
1762  	rtrcp_assigner->rtc_chkloops = loops + ULONG_MAX / 2;
1763  	rtrcp_assigner->rtc_ready = 0;
1764  	smp_store_release(&rtrcp->rtc_assigner, NULL); // Someone else can assign us work.
1765  	smp_store_release(&rtrcp_assigner->rtc_chkrdr, -1); // Assigner can again assign.
1766  }
1767  
1768  /*
1769   * Do one extension of an RCU read-side critical section using the
1770   * current reader state in readstate (set to zero for initial entry
1771   * to extended critical section), set the new state as specified by
1772   * newstate (set to zero for final exit from extended critical section),
1773   * and random-number-generator state in trsp.  If this is neither the
1774   * beginning or end of the critical section and if there was actually a
1775   * change, do a ->read_delay().
1776   */
rcutorture_one_extend(int * readstate,int newstate,struct torture_random_state * trsp,struct rt_read_seg * rtrsp)1777  static void rcutorture_one_extend(int *readstate, int newstate,
1778  				  struct torture_random_state *trsp,
1779  				  struct rt_read_seg *rtrsp)
1780  {
1781  	unsigned long flags;
1782  	int idxnew1 = -1;
1783  	int idxnew2 = -1;
1784  	int idxold1 = *readstate;
1785  	int idxold2 = idxold1;
1786  	int statesnew = ~*readstate & newstate;
1787  	int statesold = *readstate & ~newstate;
1788  
1789  	WARN_ON_ONCE(idxold2 < 0);
1790  	WARN_ON_ONCE((idxold2 >> RCUTORTURE_RDR_SHIFT_2) > 1);
1791  	rtrsp->rt_readstate = newstate;
1792  
1793  	/* First, put new protection in place to avoid critical-section gap. */
1794  	if (statesnew & RCUTORTURE_RDR_BH)
1795  		local_bh_disable();
1796  	if (statesnew & RCUTORTURE_RDR_RBH)
1797  		rcu_read_lock_bh();
1798  	if (statesnew & RCUTORTURE_RDR_IRQ)
1799  		local_irq_disable();
1800  	if (statesnew & RCUTORTURE_RDR_PREEMPT)
1801  		preempt_disable();
1802  	if (statesnew & RCUTORTURE_RDR_SCHED)
1803  		rcu_read_lock_sched();
1804  	if (statesnew & RCUTORTURE_RDR_RCU_1)
1805  		idxnew1 = (cur_ops->readlock() & 0x1) << RCUTORTURE_RDR_SHIFT_1;
1806  	if (statesnew & RCUTORTURE_RDR_RCU_2)
1807  		idxnew2 = (cur_ops->readlock() & 0x1) << RCUTORTURE_RDR_SHIFT_2;
1808  
1809  	/*
1810  	 * Next, remove old protection, in decreasing order of strength
1811  	 * to avoid unlock paths that aren't safe in the stronger
1812  	 * context. Namely: BH can not be enabled with disabled interrupts.
1813  	 * Additionally PREEMPT_RT requires that BH is enabled in preemptible
1814  	 * context.
1815  	 */
1816  	if (statesold & RCUTORTURE_RDR_IRQ)
1817  		local_irq_enable();
1818  	if (statesold & RCUTORTURE_RDR_PREEMPT)
1819  		preempt_enable();
1820  	if (statesold & RCUTORTURE_RDR_SCHED)
1821  		rcu_read_unlock_sched();
1822  	if (statesold & RCUTORTURE_RDR_BH)
1823  		local_bh_enable();
1824  	if (statesold & RCUTORTURE_RDR_RBH)
1825  		rcu_read_unlock_bh();
1826  	if (statesold & RCUTORTURE_RDR_RCU_2) {
1827  		cur_ops->readunlock((idxold2 >> RCUTORTURE_RDR_SHIFT_2) & 0x1);
1828  		WARN_ON_ONCE(idxnew2 != -1);
1829  		idxold2 = 0;
1830  	}
1831  	if (statesold & RCUTORTURE_RDR_RCU_1) {
1832  		bool lockit;
1833  
1834  		lockit = !cur_ops->no_pi_lock && !statesnew && !(torture_random(trsp) & 0xffff);
1835  		if (lockit)
1836  			raw_spin_lock_irqsave(&current->pi_lock, flags);
1837  		cur_ops->readunlock((idxold1 >> RCUTORTURE_RDR_SHIFT_1) & 0x1);
1838  		WARN_ON_ONCE(idxnew1 != -1);
1839  		idxold1 = 0;
1840  		if (lockit)
1841  			raw_spin_unlock_irqrestore(&current->pi_lock, flags);
1842  	}
1843  
1844  	/* Delay if neither beginning nor end and there was a change. */
1845  	if ((statesnew || statesold) && *readstate && newstate)
1846  		cur_ops->read_delay(trsp, rtrsp);
1847  
1848  	/* Update the reader state. */
1849  	if (idxnew1 == -1)
1850  		idxnew1 = idxold1 & RCUTORTURE_RDR_MASK_1;
1851  	WARN_ON_ONCE(idxnew1 < 0);
1852  	if (WARN_ON_ONCE((idxnew1 >> RCUTORTURE_RDR_SHIFT_1) > 1))
1853  		pr_info("Unexpected idxnew1 value of %#x\n", idxnew1);
1854  	if (idxnew2 == -1)
1855  		idxnew2 = idxold2 & RCUTORTURE_RDR_MASK_2;
1856  	WARN_ON_ONCE(idxnew2 < 0);
1857  	WARN_ON_ONCE((idxnew2 >> RCUTORTURE_RDR_SHIFT_2) > 1);
1858  	*readstate = idxnew1 | idxnew2 | newstate;
1859  	WARN_ON_ONCE(*readstate < 0);
1860  	if (WARN_ON_ONCE((*readstate >> RCUTORTURE_RDR_SHIFT_2) > 1))
1861  		pr_info("Unexpected idxnew2 value of %#x\n", idxnew2);
1862  }
1863  
1864  /* Return the biggest extendables mask given current RCU and boot parameters. */
rcutorture_extend_mask_max(void)1865  static int rcutorture_extend_mask_max(void)
1866  {
1867  	int mask;
1868  
1869  	WARN_ON_ONCE(extendables & ~RCUTORTURE_MAX_EXTEND);
1870  	mask = extendables & RCUTORTURE_MAX_EXTEND & cur_ops->extendables;
1871  	mask = mask | RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2;
1872  	return mask;
1873  }
1874  
1875  /* Return a random protection state mask, but with at least one bit set. */
1876  static int
rcutorture_extend_mask(int oldmask,struct torture_random_state * trsp)1877  rcutorture_extend_mask(int oldmask, struct torture_random_state *trsp)
1878  {
1879  	int mask = rcutorture_extend_mask_max();
1880  	unsigned long randmask1 = torture_random(trsp);
1881  	unsigned long randmask2 = randmask1 >> 3;
1882  	unsigned long preempts = RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
1883  	unsigned long preempts_irq = preempts | RCUTORTURE_RDR_IRQ;
1884  	unsigned long bhs = RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH;
1885  
1886  	WARN_ON_ONCE(mask >> RCUTORTURE_RDR_SHIFT_1);
1887  	/* Mostly only one bit (need preemption!), sometimes lots of bits. */
1888  	if (!(randmask1 & 0x7))
1889  		mask = mask & randmask2;
1890  	else
1891  		mask = mask & (1 << (randmask2 % RCUTORTURE_RDR_NBITS));
1892  
1893  	// Can't have nested RCU reader without outer RCU reader.
1894  	if (!(mask & RCUTORTURE_RDR_RCU_1) && (mask & RCUTORTURE_RDR_RCU_2)) {
1895  		if (oldmask & RCUTORTURE_RDR_RCU_1)
1896  			mask &= ~RCUTORTURE_RDR_RCU_2;
1897  		else
1898  			mask |= RCUTORTURE_RDR_RCU_1;
1899  	}
1900  
1901  	/*
1902  	 * Can't enable bh w/irq disabled.
1903  	 */
1904  	if (mask & RCUTORTURE_RDR_IRQ)
1905  		mask |= oldmask & bhs;
1906  
1907  	/*
1908  	 * Ideally these sequences would be detected in debug builds
1909  	 * (regardless of RT), but until then don't stop testing
1910  	 * them on non-RT.
1911  	 */
1912  	if (IS_ENABLED(CONFIG_PREEMPT_RT)) {
1913  		/* Can't modify BH in atomic context */
1914  		if (oldmask & preempts_irq)
1915  			mask &= ~bhs;
1916  		if ((oldmask | mask) & preempts_irq)
1917  			mask |= oldmask & bhs;
1918  	}
1919  
1920  	return mask ?: RCUTORTURE_RDR_RCU_1;
1921  }
1922  
1923  /*
1924   * Do a randomly selected number of extensions of an existing RCU read-side
1925   * critical section.
1926   */
1927  static struct rt_read_seg *
rcutorture_loop_extend(int * readstate,struct torture_random_state * trsp,struct rt_read_seg * rtrsp)1928  rcutorture_loop_extend(int *readstate, struct torture_random_state *trsp,
1929  		       struct rt_read_seg *rtrsp)
1930  {
1931  	int i;
1932  	int j;
1933  	int mask = rcutorture_extend_mask_max();
1934  
1935  	WARN_ON_ONCE(!*readstate); /* -Existing- RCU read-side critsect! */
1936  	if (!((mask - 1) & mask))
1937  		return rtrsp;  /* Current RCU reader not extendable. */
1938  	/* Bias towards larger numbers of loops. */
1939  	i = torture_random(trsp);
1940  	i = ((i | (i >> 3)) & RCUTORTURE_RDR_MAX_LOOPS) + 1;
1941  	for (j = 0; j < i; j++) {
1942  		mask = rcutorture_extend_mask(*readstate, trsp);
1943  		rcutorture_one_extend(readstate, mask, trsp, &rtrsp[j]);
1944  	}
1945  	return &rtrsp[j];
1946  }
1947  
1948  /*
1949   * Do one read-side critical section, returning false if there was
1950   * no data to read.  Can be invoked both from process context and
1951   * from a timer handler.
1952   */
rcu_torture_one_read(struct torture_random_state * trsp,long myid)1953  static bool rcu_torture_one_read(struct torture_random_state *trsp, long myid)
1954  {
1955  	bool checkpolling = !(torture_random(trsp) & 0xfff);
1956  	unsigned long cookie;
1957  	struct rcu_gp_oldstate cookie_full;
1958  	int i;
1959  	unsigned long started;
1960  	unsigned long completed;
1961  	int newstate;
1962  	struct rcu_torture *p;
1963  	int pipe_count;
1964  	int readstate = 0;
1965  	struct rt_read_seg rtseg[RCUTORTURE_RDR_MAX_SEGS] = { { 0 } };
1966  	struct rt_read_seg *rtrsp = &rtseg[0];
1967  	struct rt_read_seg *rtrsp1;
1968  	unsigned long long ts;
1969  
1970  	WARN_ON_ONCE(!rcu_is_watching());
1971  	newstate = rcutorture_extend_mask(readstate, trsp);
1972  	rcutorture_one_extend(&readstate, newstate, trsp, rtrsp++);
1973  	if (checkpolling) {
1974  		if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
1975  			cookie = cur_ops->get_gp_state();
1976  		if (cur_ops->get_gp_state_full && cur_ops->poll_gp_state_full)
1977  			cur_ops->get_gp_state_full(&cookie_full);
1978  	}
1979  	started = cur_ops->get_gp_seq();
1980  	ts = rcu_trace_clock_local();
1981  	p = rcu_dereference_check(rcu_torture_current,
1982  				  !cur_ops->readlock_held || cur_ops->readlock_held());
1983  	if (p == NULL) {
1984  		/* Wait for rcu_torture_writer to get underway */
1985  		rcutorture_one_extend(&readstate, 0, trsp, rtrsp);
1986  		return false;
1987  	}
1988  	if (p->rtort_mbtest == 0)
1989  		atomic_inc(&n_rcu_torture_mberror);
1990  	rcu_torture_reader_do_mbchk(myid, p, trsp);
1991  	rtrsp = rcutorture_loop_extend(&readstate, trsp, rtrsp);
1992  	preempt_disable();
1993  	pipe_count = READ_ONCE(p->rtort_pipe_count);
1994  	if (pipe_count > RCU_TORTURE_PIPE_LEN) {
1995  		// Should not happen in a correct RCU implementation,
1996  		// happens quite often for torture_type=busted.
1997  		pipe_count = RCU_TORTURE_PIPE_LEN;
1998  	}
1999  	completed = cur_ops->get_gp_seq();
2000  	if (pipe_count > 1) {
2001  		do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu,
2002  					  ts, started, completed);
2003  		rcu_ftrace_dump(DUMP_ALL);
2004  	}
2005  	__this_cpu_inc(rcu_torture_count[pipe_count]);
2006  	completed = rcutorture_seq_diff(completed, started);
2007  	if (completed > RCU_TORTURE_PIPE_LEN) {
2008  		/* Should not happen, but... */
2009  		completed = RCU_TORTURE_PIPE_LEN;
2010  	}
2011  	__this_cpu_inc(rcu_torture_batch[completed]);
2012  	preempt_enable();
2013  	if (checkpolling) {
2014  		if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
2015  			WARN_ONCE(cur_ops->poll_gp_state(cookie),
2016  				  "%s: Cookie check 2 failed %s(%d) %lu->%lu\n",
2017  				  __func__,
2018  				  rcu_torture_writer_state_getname(),
2019  				  rcu_torture_writer_state,
2020  				  cookie, cur_ops->get_gp_state());
2021  		if (cur_ops->get_gp_state_full && cur_ops->poll_gp_state_full)
2022  			WARN_ONCE(cur_ops->poll_gp_state_full(&cookie_full),
2023  				  "%s: Cookie check 6 failed %s(%d) online %*pbl\n",
2024  				  __func__,
2025  				  rcu_torture_writer_state_getname(),
2026  				  rcu_torture_writer_state,
2027  				  cpumask_pr_args(cpu_online_mask));
2028  	}
2029  	rcutorture_one_extend(&readstate, 0, trsp, rtrsp);
2030  	WARN_ON_ONCE(readstate);
2031  	// This next splat is expected behavior if leakpointer, especially
2032  	// for CONFIG_RCU_STRICT_GRACE_PERIOD=y kernels.
2033  	WARN_ON_ONCE(leakpointer && READ_ONCE(p->rtort_pipe_count) > 1);
2034  
2035  	/* If error or close call, record the sequence of reader protections. */
2036  	if ((pipe_count > 1 || completed > 1) && !xchg(&err_segs_recorded, 1)) {
2037  		i = 0;
2038  		for (rtrsp1 = &rtseg[0]; rtrsp1 < rtrsp; rtrsp1++)
2039  			err_segs[i++] = *rtrsp1;
2040  		rt_read_nsegs = i;
2041  	}
2042  
2043  	return true;
2044  }
2045  
2046  static DEFINE_TORTURE_RANDOM_PERCPU(rcu_torture_timer_rand);
2047  
2048  /*
2049   * RCU torture reader from timer handler.  Dereferences rcu_torture_current,
2050   * incrementing the corresponding element of the pipeline array.  The
2051   * counter in the element should never be greater than 1, otherwise, the
2052   * RCU implementation is broken.
2053   */
rcu_torture_timer(struct timer_list * unused)2054  static void rcu_torture_timer(struct timer_list *unused)
2055  {
2056  	atomic_long_inc(&n_rcu_torture_timers);
2057  	(void)rcu_torture_one_read(this_cpu_ptr(&rcu_torture_timer_rand), -1);
2058  
2059  	/* Test call_rcu() invocation from interrupt handler. */
2060  	if (cur_ops->call) {
2061  		struct rcu_head *rhp = kmalloc(sizeof(*rhp), GFP_NOWAIT);
2062  
2063  		if (rhp)
2064  			cur_ops->call(rhp, rcu_torture_timer_cb);
2065  	}
2066  }
2067  
2068  /*
2069   * RCU torture reader kthread.  Repeatedly dereferences rcu_torture_current,
2070   * incrementing the corresponding element of the pipeline array.  The
2071   * counter in the element should never be greater than 1, otherwise, the
2072   * RCU implementation is broken.
2073   */
2074  static int
rcu_torture_reader(void * arg)2075  rcu_torture_reader(void *arg)
2076  {
2077  	unsigned long lastsleep = jiffies;
2078  	long myid = (long)arg;
2079  	int mynumonline = myid;
2080  	DEFINE_TORTURE_RANDOM(rand);
2081  	struct timer_list t;
2082  
2083  	VERBOSE_TOROUT_STRING("rcu_torture_reader task started");
2084  	set_user_nice(current, MAX_NICE);
2085  	if (irqreader && cur_ops->irq_capable)
2086  		timer_setup_on_stack(&t, rcu_torture_timer, 0);
2087  	tick_dep_set_task(current, TICK_DEP_BIT_RCU);
2088  	do {
2089  		if (irqreader && cur_ops->irq_capable) {
2090  			if (!timer_pending(&t))
2091  				mod_timer(&t, jiffies + 1);
2092  		}
2093  		if (!rcu_torture_one_read(&rand, myid) && !torture_must_stop())
2094  			schedule_timeout_interruptible(HZ);
2095  		if (time_after(jiffies, lastsleep) && !torture_must_stop()) {
2096  			torture_hrtimeout_us(500, 1000, &rand);
2097  			lastsleep = jiffies + 10;
2098  		}
2099  		while (torture_num_online_cpus() < mynumonline && !torture_must_stop())
2100  			schedule_timeout_interruptible(HZ / 5);
2101  		stutter_wait("rcu_torture_reader");
2102  	} while (!torture_must_stop());
2103  	if (irqreader && cur_ops->irq_capable) {
2104  		del_timer_sync(&t);
2105  		destroy_timer_on_stack(&t);
2106  	}
2107  	tick_dep_clear_task(current, TICK_DEP_BIT_RCU);
2108  	torture_kthread_stopping("rcu_torture_reader");
2109  	return 0;
2110  }
2111  
2112  /*
2113   * Randomly Toggle CPUs' callback-offload state.  This uses hrtimers to
2114   * increase race probabilities and fuzzes the interval between toggling.
2115   */
rcu_nocb_toggle(void * arg)2116  static int rcu_nocb_toggle(void *arg)
2117  {
2118  	int cpu;
2119  	int maxcpu = -1;
2120  	int oldnice = task_nice(current);
2121  	long r;
2122  	DEFINE_TORTURE_RANDOM(rand);
2123  	ktime_t toggle_delay;
2124  	unsigned long toggle_fuzz;
2125  	ktime_t toggle_interval = ms_to_ktime(nocbs_toggle);
2126  
2127  	VERBOSE_TOROUT_STRING("rcu_nocb_toggle task started");
2128  	while (!rcu_inkernel_boot_has_ended())
2129  		schedule_timeout_interruptible(HZ / 10);
2130  	for_each_online_cpu(cpu)
2131  		maxcpu = cpu;
2132  	WARN_ON(maxcpu < 0);
2133  	if (toggle_interval > ULONG_MAX)
2134  		toggle_fuzz = ULONG_MAX >> 3;
2135  	else
2136  		toggle_fuzz = toggle_interval >> 3;
2137  	if (toggle_fuzz <= 0)
2138  		toggle_fuzz = NSEC_PER_USEC;
2139  	do {
2140  		r = torture_random(&rand);
2141  		cpu = (r >> 1) % (maxcpu + 1);
2142  		if (r & 0x1) {
2143  			rcu_nocb_cpu_offload(cpu);
2144  			atomic_long_inc(&n_nocb_offload);
2145  		} else {
2146  			rcu_nocb_cpu_deoffload(cpu);
2147  			atomic_long_inc(&n_nocb_deoffload);
2148  		}
2149  		toggle_delay = torture_random(&rand) % toggle_fuzz + toggle_interval;
2150  		set_current_state(TASK_INTERRUPTIBLE);
2151  		schedule_hrtimeout(&toggle_delay, HRTIMER_MODE_REL);
2152  		if (stutter_wait("rcu_nocb_toggle"))
2153  			sched_set_normal(current, oldnice);
2154  	} while (!torture_must_stop());
2155  	torture_kthread_stopping("rcu_nocb_toggle");
2156  	return 0;
2157  }
2158  
2159  /*
2160   * Print torture statistics.  Caller must ensure that there is only
2161   * one call to this function at a given time!!!  This is normally
2162   * accomplished by relying on the module system to only have one copy
2163   * of the module loaded, and then by giving the rcu_torture_stats
2164   * kthread full control (or the init/cleanup functions when rcu_torture_stats
2165   * thread is not running).
2166   */
2167  static void
rcu_torture_stats_print(void)2168  rcu_torture_stats_print(void)
2169  {
2170  	int cpu;
2171  	int i;
2172  	long pipesummary[RCU_TORTURE_PIPE_LEN + 1] = { 0 };
2173  	long batchsummary[RCU_TORTURE_PIPE_LEN + 1] = { 0 };
2174  	struct rcu_torture *rtcp;
2175  	static unsigned long rtcv_snap = ULONG_MAX;
2176  	static bool splatted;
2177  	struct task_struct *wtp;
2178  
2179  	for_each_possible_cpu(cpu) {
2180  		for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
2181  			pipesummary[i] += READ_ONCE(per_cpu(rcu_torture_count, cpu)[i]);
2182  			batchsummary[i] += READ_ONCE(per_cpu(rcu_torture_batch, cpu)[i]);
2183  		}
2184  	}
2185  	for (i = RCU_TORTURE_PIPE_LEN; i >= 0; i--) {
2186  		if (pipesummary[i] != 0)
2187  			break;
2188  	}
2189  
2190  	pr_alert("%s%s ", torture_type, TORTURE_FLAG);
2191  	rtcp = rcu_access_pointer(rcu_torture_current);
2192  	pr_cont("rtc: %p %s: %lu tfle: %d rta: %d rtaf: %d rtf: %d ",
2193  		rtcp,
2194  		rtcp && !rcu_stall_is_suppressed_at_boot() ? "ver" : "VER",
2195  		rcu_torture_current_version,
2196  		list_empty(&rcu_torture_freelist),
2197  		atomic_read(&n_rcu_torture_alloc),
2198  		atomic_read(&n_rcu_torture_alloc_fail),
2199  		atomic_read(&n_rcu_torture_free));
2200  	pr_cont("rtmbe: %d rtmbkf: %d/%d rtbe: %ld rtbke: %ld ",
2201  		atomic_read(&n_rcu_torture_mberror),
2202  		atomic_read(&n_rcu_torture_mbchk_fail), atomic_read(&n_rcu_torture_mbchk_tries),
2203  		n_rcu_torture_barrier_error,
2204  		n_rcu_torture_boost_ktrerror);
2205  	pr_cont("rtbf: %ld rtb: %ld nt: %ld ",
2206  		n_rcu_torture_boost_failure,
2207  		n_rcu_torture_boosts,
2208  		atomic_long_read(&n_rcu_torture_timers));
2209  	torture_onoff_stats();
2210  	pr_cont("barrier: %ld/%ld:%ld ",
2211  		data_race(n_barrier_successes),
2212  		data_race(n_barrier_attempts),
2213  		data_race(n_rcu_torture_barrier_error));
2214  	pr_cont("read-exits: %ld ", data_race(n_read_exits)); // Statistic.
2215  	pr_cont("nocb-toggles: %ld:%ld\n",
2216  		atomic_long_read(&n_nocb_offload), atomic_long_read(&n_nocb_deoffload));
2217  
2218  	pr_alert("%s%s ", torture_type, TORTURE_FLAG);
2219  	if (atomic_read(&n_rcu_torture_mberror) ||
2220  	    atomic_read(&n_rcu_torture_mbchk_fail) ||
2221  	    n_rcu_torture_barrier_error || n_rcu_torture_boost_ktrerror ||
2222  	    n_rcu_torture_boost_failure || i > 1) {
2223  		pr_cont("%s", "!!! ");
2224  		atomic_inc(&n_rcu_torture_error);
2225  		WARN_ON_ONCE(atomic_read(&n_rcu_torture_mberror));
2226  		WARN_ON_ONCE(atomic_read(&n_rcu_torture_mbchk_fail));
2227  		WARN_ON_ONCE(n_rcu_torture_barrier_error);  // rcu_barrier()
2228  		WARN_ON_ONCE(n_rcu_torture_boost_ktrerror); // no boost kthread
2229  		WARN_ON_ONCE(n_rcu_torture_boost_failure); // boost failed (TIMER_SOFTIRQ RT prio?)
2230  		WARN_ON_ONCE(i > 1); // Too-short grace period
2231  	}
2232  	pr_cont("Reader Pipe: ");
2233  	for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++)
2234  		pr_cont(" %ld", pipesummary[i]);
2235  	pr_cont("\n");
2236  
2237  	pr_alert("%s%s ", torture_type, TORTURE_FLAG);
2238  	pr_cont("Reader Batch: ");
2239  	for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++)
2240  		pr_cont(" %ld", batchsummary[i]);
2241  	pr_cont("\n");
2242  
2243  	pr_alert("%s%s ", torture_type, TORTURE_FLAG);
2244  	pr_cont("Free-Block Circulation: ");
2245  	for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
2246  		pr_cont(" %d", atomic_read(&rcu_torture_wcount[i]));
2247  	}
2248  	pr_cont("\n");
2249  
2250  	if (cur_ops->stats)
2251  		cur_ops->stats();
2252  	if (rtcv_snap == rcu_torture_current_version &&
2253  	    rcu_access_pointer(rcu_torture_current) &&
2254  	    !rcu_stall_is_suppressed()) {
2255  		int __maybe_unused flags = 0;
2256  		unsigned long __maybe_unused gp_seq = 0;
2257  
2258  		rcutorture_get_gp_data(cur_ops->ttype,
2259  				       &flags, &gp_seq);
2260  		srcutorture_get_gp_data(cur_ops->ttype, srcu_ctlp,
2261  					&flags, &gp_seq);
2262  		wtp = READ_ONCE(writer_task);
2263  		pr_alert("??? Writer stall state %s(%d) g%lu f%#x ->state %#x cpu %d\n",
2264  			 rcu_torture_writer_state_getname(),
2265  			 rcu_torture_writer_state, gp_seq, flags,
2266  			 wtp == NULL ? ~0U : wtp->__state,
2267  			 wtp == NULL ? -1 : (int)task_cpu(wtp));
2268  		if (!splatted && wtp) {
2269  			sched_show_task(wtp);
2270  			splatted = true;
2271  		}
2272  		if (cur_ops->gp_kthread_dbg)
2273  			cur_ops->gp_kthread_dbg();
2274  		rcu_ftrace_dump(DUMP_ALL);
2275  	}
2276  	rtcv_snap = rcu_torture_current_version;
2277  }
2278  
2279  /*
2280   * Periodically prints torture statistics, if periodic statistics printing
2281   * was specified via the stat_interval module parameter.
2282   */
2283  static int
rcu_torture_stats(void * arg)2284  rcu_torture_stats(void *arg)
2285  {
2286  	VERBOSE_TOROUT_STRING("rcu_torture_stats task started");
2287  	do {
2288  		schedule_timeout_interruptible(stat_interval * HZ);
2289  		rcu_torture_stats_print();
2290  		torture_shutdown_absorb("rcu_torture_stats");
2291  	} while (!torture_must_stop());
2292  	torture_kthread_stopping("rcu_torture_stats");
2293  	return 0;
2294  }
2295  
2296  /* Test mem_dump_obj() and friends.  */
rcu_torture_mem_dump_obj(void)2297  static void rcu_torture_mem_dump_obj(void)
2298  {
2299  	struct rcu_head *rhp;
2300  	struct kmem_cache *kcp;
2301  	static int z;
2302  
2303  	kcp = kmem_cache_create("rcuscale", 136, 8, SLAB_STORE_USER, NULL);
2304  	if (WARN_ON_ONCE(!kcp))
2305  		return;
2306  	rhp = kmem_cache_alloc(kcp, GFP_KERNEL);
2307  	if (WARN_ON_ONCE(!rhp)) {
2308  		kmem_cache_destroy(kcp);
2309  		return;
2310  	}
2311  	pr_alert("mem_dump_obj() slab test: rcu_torture_stats = %px, &rhp = %px, rhp = %px, &z = %px\n", stats_task, &rhp, rhp, &z);
2312  	pr_alert("mem_dump_obj(ZERO_SIZE_PTR):");
2313  	mem_dump_obj(ZERO_SIZE_PTR);
2314  	pr_alert("mem_dump_obj(NULL):");
2315  	mem_dump_obj(NULL);
2316  	pr_alert("mem_dump_obj(%px):", &rhp);
2317  	mem_dump_obj(&rhp);
2318  	pr_alert("mem_dump_obj(%px):", rhp);
2319  	mem_dump_obj(rhp);
2320  	pr_alert("mem_dump_obj(%px):", &rhp->func);
2321  	mem_dump_obj(&rhp->func);
2322  	pr_alert("mem_dump_obj(%px):", &z);
2323  	mem_dump_obj(&z);
2324  	kmem_cache_free(kcp, rhp);
2325  	kmem_cache_destroy(kcp);
2326  	rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
2327  	if (WARN_ON_ONCE(!rhp))
2328  		return;
2329  	pr_alert("mem_dump_obj() kmalloc test: rcu_torture_stats = %px, &rhp = %px, rhp = %px\n", stats_task, &rhp, rhp);
2330  	pr_alert("mem_dump_obj(kmalloc %px):", rhp);
2331  	mem_dump_obj(rhp);
2332  	pr_alert("mem_dump_obj(kmalloc %px):", &rhp->func);
2333  	mem_dump_obj(&rhp->func);
2334  	kfree(rhp);
2335  	rhp = vmalloc(4096);
2336  	if (WARN_ON_ONCE(!rhp))
2337  		return;
2338  	pr_alert("mem_dump_obj() vmalloc test: rcu_torture_stats = %px, &rhp = %px, rhp = %px\n", stats_task, &rhp, rhp);
2339  	pr_alert("mem_dump_obj(vmalloc %px):", rhp);
2340  	mem_dump_obj(rhp);
2341  	pr_alert("mem_dump_obj(vmalloc %px):", &rhp->func);
2342  	mem_dump_obj(&rhp->func);
2343  	vfree(rhp);
2344  }
2345  
2346  static void
rcu_torture_print_module_parms(struct rcu_torture_ops * cur_ops,const char * tag)2347  rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag)
2348  {
2349  	pr_alert("%s" TORTURE_FLAG
2350  		 "--- %s: nreaders=%d nfakewriters=%d "
2351  		 "stat_interval=%d verbose=%d test_no_idle_hz=%d "
2352  		 "shuffle_interval=%d stutter=%d irqreader=%d "
2353  		 "fqs_duration=%d fqs_holdoff=%d fqs_stutter=%d "
2354  		 "test_boost=%d/%d test_boost_interval=%d "
2355  		 "test_boost_duration=%d shutdown_secs=%d "
2356  		 "stall_cpu=%d stall_cpu_holdoff=%d stall_cpu_irqsoff=%d "
2357  		 "stall_cpu_block=%d "
2358  		 "n_barrier_cbs=%d "
2359  		 "onoff_interval=%d onoff_holdoff=%d "
2360  		 "read_exit_delay=%d read_exit_burst=%d "
2361  		 "nocbs_nthreads=%d nocbs_toggle=%d "
2362  		 "test_nmis=%d\n",
2363  		 torture_type, tag, nrealreaders, nfakewriters,
2364  		 stat_interval, verbose, test_no_idle_hz, shuffle_interval,
2365  		 stutter, irqreader, fqs_duration, fqs_holdoff, fqs_stutter,
2366  		 test_boost, cur_ops->can_boost,
2367  		 test_boost_interval, test_boost_duration, shutdown_secs,
2368  		 stall_cpu, stall_cpu_holdoff, stall_cpu_irqsoff,
2369  		 stall_cpu_block,
2370  		 n_barrier_cbs,
2371  		 onoff_interval, onoff_holdoff,
2372  		 read_exit_delay, read_exit_burst,
2373  		 nocbs_nthreads, nocbs_toggle,
2374  		 test_nmis);
2375  }
2376  
rcutorture_booster_cleanup(unsigned int cpu)2377  static int rcutorture_booster_cleanup(unsigned int cpu)
2378  {
2379  	struct task_struct *t;
2380  
2381  	if (boost_tasks[cpu] == NULL)
2382  		return 0;
2383  	mutex_lock(&boost_mutex);
2384  	t = boost_tasks[cpu];
2385  	boost_tasks[cpu] = NULL;
2386  	rcu_torture_enable_rt_throttle();
2387  	mutex_unlock(&boost_mutex);
2388  
2389  	/* This must be outside of the mutex, otherwise deadlock! */
2390  	torture_stop_kthread(rcu_torture_boost, t);
2391  	return 0;
2392  }
2393  
rcutorture_booster_init(unsigned int cpu)2394  static int rcutorture_booster_init(unsigned int cpu)
2395  {
2396  	int retval;
2397  
2398  	if (boost_tasks[cpu] != NULL)
2399  		return 0;  /* Already created, nothing more to do. */
2400  
2401  	// Testing RCU priority boosting requires rcutorture do
2402  	// some serious abuse.  Counter this by running ksoftirqd
2403  	// at higher priority.
2404  	if (IS_BUILTIN(CONFIG_RCU_TORTURE_TEST)) {
2405  		struct sched_param sp;
2406  		struct task_struct *t;
2407  
2408  		t = per_cpu(ksoftirqd, cpu);
2409  		WARN_ON_ONCE(!t);
2410  		sp.sched_priority = 2;
2411  		sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
2412  	}
2413  
2414  	/* Don't allow time recalculation while creating a new task. */
2415  	mutex_lock(&boost_mutex);
2416  	rcu_torture_disable_rt_throttle();
2417  	VERBOSE_TOROUT_STRING("Creating rcu_torture_boost task");
2418  	boost_tasks[cpu] = kthread_run_on_cpu(rcu_torture_boost, NULL,
2419  					      cpu, "rcu_torture_boost_%u");
2420  	if (IS_ERR(boost_tasks[cpu])) {
2421  		retval = PTR_ERR(boost_tasks[cpu]);
2422  		VERBOSE_TOROUT_STRING("rcu_torture_boost task create failed");
2423  		n_rcu_torture_boost_ktrerror++;
2424  		boost_tasks[cpu] = NULL;
2425  		mutex_unlock(&boost_mutex);
2426  		return retval;
2427  	}
2428  	mutex_unlock(&boost_mutex);
2429  	return 0;
2430  }
2431  
2432  /*
2433   * CPU-stall kthread.  It waits as specified by stall_cpu_holdoff, then
2434   * induces a CPU stall for the time specified by stall_cpu.
2435   */
rcu_torture_stall(void * args)2436  static int rcu_torture_stall(void *args)
2437  {
2438  	int idx;
2439  	unsigned long stop_at;
2440  
2441  	VERBOSE_TOROUT_STRING("rcu_torture_stall task started");
2442  	if (stall_cpu_holdoff > 0) {
2443  		VERBOSE_TOROUT_STRING("rcu_torture_stall begin holdoff");
2444  		schedule_timeout_interruptible(stall_cpu_holdoff * HZ);
2445  		VERBOSE_TOROUT_STRING("rcu_torture_stall end holdoff");
2446  	}
2447  	if (!kthread_should_stop() && stall_gp_kthread > 0) {
2448  		VERBOSE_TOROUT_STRING("rcu_torture_stall begin GP stall");
2449  		rcu_gp_set_torture_wait(stall_gp_kthread * HZ);
2450  		for (idx = 0; idx < stall_gp_kthread + 2; idx++) {
2451  			if (kthread_should_stop())
2452  				break;
2453  			schedule_timeout_uninterruptible(HZ);
2454  		}
2455  	}
2456  	if (!kthread_should_stop() && stall_cpu > 0) {
2457  		VERBOSE_TOROUT_STRING("rcu_torture_stall begin CPU stall");
2458  		stop_at = ktime_get_seconds() + stall_cpu;
2459  		/* RCU CPU stall is expected behavior in following code. */
2460  		idx = cur_ops->readlock();
2461  		if (stall_cpu_irqsoff)
2462  			local_irq_disable();
2463  		else if (!stall_cpu_block)
2464  			preempt_disable();
2465  		pr_alert("%s start on CPU %d.\n",
2466  			  __func__, raw_smp_processor_id());
2467  		while (ULONG_CMP_LT((unsigned long)ktime_get_seconds(), stop_at) &&
2468  		       !kthread_should_stop())
2469  			if (stall_cpu_block) {
2470  #ifdef CONFIG_PREEMPTION
2471  				preempt_schedule();
2472  #else
2473  				schedule_timeout_uninterruptible(HZ);
2474  #endif
2475  			} else if (stall_no_softlockup) {
2476  				touch_softlockup_watchdog();
2477  			}
2478  		if (stall_cpu_irqsoff)
2479  			local_irq_enable();
2480  		else if (!stall_cpu_block)
2481  			preempt_enable();
2482  		cur_ops->readunlock(idx);
2483  	}
2484  	pr_alert("%s end.\n", __func__);
2485  	torture_shutdown_absorb("rcu_torture_stall");
2486  	while (!kthread_should_stop())
2487  		schedule_timeout_interruptible(10 * HZ);
2488  	return 0;
2489  }
2490  
2491  /* Spawn CPU-stall kthread, if stall_cpu specified. */
rcu_torture_stall_init(void)2492  static int __init rcu_torture_stall_init(void)
2493  {
2494  	if (stall_cpu <= 0 && stall_gp_kthread <= 0)
2495  		return 0;
2496  	return torture_create_kthread(rcu_torture_stall, NULL, stall_task);
2497  }
2498  
2499  /* State structure for forward-progress self-propagating RCU callback. */
2500  struct fwd_cb_state {
2501  	struct rcu_head rh;
2502  	int stop;
2503  };
2504  
2505  /*
2506   * Forward-progress self-propagating RCU callback function.  Because
2507   * callbacks run from softirq, this function is an implicit RCU read-side
2508   * critical section.
2509   */
rcu_torture_fwd_prog_cb(struct rcu_head * rhp)2510  static void rcu_torture_fwd_prog_cb(struct rcu_head *rhp)
2511  {
2512  	struct fwd_cb_state *fcsp = container_of(rhp, struct fwd_cb_state, rh);
2513  
2514  	if (READ_ONCE(fcsp->stop)) {
2515  		WRITE_ONCE(fcsp->stop, 2);
2516  		return;
2517  	}
2518  	cur_ops->call(&fcsp->rh, rcu_torture_fwd_prog_cb);
2519  }
2520  
2521  /* State for continuous-flood RCU callbacks. */
2522  struct rcu_fwd_cb {
2523  	struct rcu_head rh;
2524  	struct rcu_fwd_cb *rfc_next;
2525  	struct rcu_fwd *rfc_rfp;
2526  	int rfc_gps;
2527  };
2528  
2529  #define MAX_FWD_CB_JIFFIES	(8 * HZ) /* Maximum CB test duration. */
2530  #define MIN_FWD_CB_LAUNDERS	3	/* This many CB invocations to count. */
2531  #define MIN_FWD_CBS_LAUNDERED	100	/* Number of counted CBs. */
2532  #define FWD_CBS_HIST_DIV	10	/* Histogram buckets/second. */
2533  #define N_LAUNDERS_HIST (2 * MAX_FWD_CB_JIFFIES / (HZ / FWD_CBS_HIST_DIV))
2534  
2535  struct rcu_launder_hist {
2536  	long n_launders;
2537  	unsigned long launder_gp_seq;
2538  };
2539  
2540  struct rcu_fwd {
2541  	spinlock_t rcu_fwd_lock;
2542  	struct rcu_fwd_cb *rcu_fwd_cb_head;
2543  	struct rcu_fwd_cb **rcu_fwd_cb_tail;
2544  	long n_launders_cb;
2545  	unsigned long rcu_fwd_startat;
2546  	struct rcu_launder_hist n_launders_hist[N_LAUNDERS_HIST];
2547  	unsigned long rcu_launder_gp_seq_start;
2548  	int rcu_fwd_id;
2549  };
2550  
2551  static DEFINE_MUTEX(rcu_fwd_mutex);
2552  static struct rcu_fwd *rcu_fwds;
2553  static unsigned long rcu_fwd_seq;
2554  static atomic_long_t rcu_fwd_max_cbs;
2555  static bool rcu_fwd_emergency_stop;
2556  
rcu_torture_fwd_cb_hist(struct rcu_fwd * rfp)2557  static void rcu_torture_fwd_cb_hist(struct rcu_fwd *rfp)
2558  {
2559  	unsigned long gps;
2560  	unsigned long gps_old;
2561  	int i;
2562  	int j;
2563  
2564  	for (i = ARRAY_SIZE(rfp->n_launders_hist) - 1; i > 0; i--)
2565  		if (rfp->n_launders_hist[i].n_launders > 0)
2566  			break;
2567  	pr_alert("%s: Callback-invocation histogram %d (duration %lu jiffies):",
2568  		 __func__, rfp->rcu_fwd_id, jiffies - rfp->rcu_fwd_startat);
2569  	gps_old = rfp->rcu_launder_gp_seq_start;
2570  	for (j = 0; j <= i; j++) {
2571  		gps = rfp->n_launders_hist[j].launder_gp_seq;
2572  		pr_cont(" %ds/%d: %ld:%ld",
2573  			j + 1, FWD_CBS_HIST_DIV,
2574  			rfp->n_launders_hist[j].n_launders,
2575  			rcutorture_seq_diff(gps, gps_old));
2576  		gps_old = gps;
2577  	}
2578  	pr_cont("\n");
2579  }
2580  
2581  /* Callback function for continuous-flood RCU callbacks. */
rcu_torture_fwd_cb_cr(struct rcu_head * rhp)2582  static void rcu_torture_fwd_cb_cr(struct rcu_head *rhp)
2583  {
2584  	unsigned long flags;
2585  	int i;
2586  	struct rcu_fwd_cb *rfcp = container_of(rhp, struct rcu_fwd_cb, rh);
2587  	struct rcu_fwd_cb **rfcpp;
2588  	struct rcu_fwd *rfp = rfcp->rfc_rfp;
2589  
2590  	rfcp->rfc_next = NULL;
2591  	rfcp->rfc_gps++;
2592  	spin_lock_irqsave(&rfp->rcu_fwd_lock, flags);
2593  	rfcpp = rfp->rcu_fwd_cb_tail;
2594  	rfp->rcu_fwd_cb_tail = &rfcp->rfc_next;
2595  	smp_store_release(rfcpp, rfcp);
2596  	WRITE_ONCE(rfp->n_launders_cb, rfp->n_launders_cb + 1);
2597  	i = ((jiffies - rfp->rcu_fwd_startat) / (HZ / FWD_CBS_HIST_DIV));
2598  	if (i >= ARRAY_SIZE(rfp->n_launders_hist))
2599  		i = ARRAY_SIZE(rfp->n_launders_hist) - 1;
2600  	rfp->n_launders_hist[i].n_launders++;
2601  	rfp->n_launders_hist[i].launder_gp_seq = cur_ops->get_gp_seq();
2602  	spin_unlock_irqrestore(&rfp->rcu_fwd_lock, flags);
2603  }
2604  
2605  // Give the scheduler a chance, even on nohz_full CPUs.
rcu_torture_fwd_prog_cond_resched(unsigned long iter)2606  static void rcu_torture_fwd_prog_cond_resched(unsigned long iter)
2607  {
2608  	if (IS_ENABLED(CONFIG_PREEMPTION) && IS_ENABLED(CONFIG_NO_HZ_FULL)) {
2609  		// Real call_rcu() floods hit userspace, so emulate that.
2610  		if (need_resched() || (iter & 0xfff))
2611  			schedule();
2612  		return;
2613  	}
2614  	// No userspace emulation: CB invocation throttles call_rcu()
2615  	cond_resched();
2616  }
2617  
2618  /*
2619   * Free all callbacks on the rcu_fwd_cb_head list, either because the
2620   * test is over or because we hit an OOM event.
2621   */
rcu_torture_fwd_prog_cbfree(struct rcu_fwd * rfp)2622  static unsigned long rcu_torture_fwd_prog_cbfree(struct rcu_fwd *rfp)
2623  {
2624  	unsigned long flags;
2625  	unsigned long freed = 0;
2626  	struct rcu_fwd_cb *rfcp;
2627  
2628  	for (;;) {
2629  		spin_lock_irqsave(&rfp->rcu_fwd_lock, flags);
2630  		rfcp = rfp->rcu_fwd_cb_head;
2631  		if (!rfcp) {
2632  			spin_unlock_irqrestore(&rfp->rcu_fwd_lock, flags);
2633  			break;
2634  		}
2635  		rfp->rcu_fwd_cb_head = rfcp->rfc_next;
2636  		if (!rfp->rcu_fwd_cb_head)
2637  			rfp->rcu_fwd_cb_tail = &rfp->rcu_fwd_cb_head;
2638  		spin_unlock_irqrestore(&rfp->rcu_fwd_lock, flags);
2639  		kfree(rfcp);
2640  		freed++;
2641  		rcu_torture_fwd_prog_cond_resched(freed);
2642  		if (tick_nohz_full_enabled()) {
2643  			local_irq_save(flags);
2644  			rcu_momentary_dyntick_idle();
2645  			local_irq_restore(flags);
2646  		}
2647  	}
2648  	return freed;
2649  }
2650  
2651  /* Carry out need_resched()/cond_resched() forward-progress testing. */
rcu_torture_fwd_prog_nr(struct rcu_fwd * rfp,int * tested,int * tested_tries)2652  static void rcu_torture_fwd_prog_nr(struct rcu_fwd *rfp,
2653  				    int *tested, int *tested_tries)
2654  {
2655  	unsigned long cver;
2656  	unsigned long dur;
2657  	struct fwd_cb_state fcs;
2658  	unsigned long gps;
2659  	int idx;
2660  	int sd;
2661  	int sd4;
2662  	bool selfpropcb = false;
2663  	unsigned long stopat;
2664  	static DEFINE_TORTURE_RANDOM(trs);
2665  
2666  	pr_alert("%s: Starting forward-progress test %d\n", __func__, rfp->rcu_fwd_id);
2667  	if (!cur_ops->sync)
2668  		return; // Cannot do need_resched() forward progress testing without ->sync.
2669  	if (cur_ops->call && cur_ops->cb_barrier) {
2670  		init_rcu_head_on_stack(&fcs.rh);
2671  		selfpropcb = true;
2672  	}
2673  
2674  	/* Tight loop containing cond_resched(). */
2675  	atomic_inc(&rcu_fwd_cb_nodelay);
2676  	cur_ops->sync(); /* Later readers see above write. */
2677  	if  (selfpropcb) {
2678  		WRITE_ONCE(fcs.stop, 0);
2679  		cur_ops->call(&fcs.rh, rcu_torture_fwd_prog_cb);
2680  	}
2681  	cver = READ_ONCE(rcu_torture_current_version);
2682  	gps = cur_ops->get_gp_seq();
2683  	sd = cur_ops->stall_dur() + 1;
2684  	sd4 = (sd + fwd_progress_div - 1) / fwd_progress_div;
2685  	dur = sd4 + torture_random(&trs) % (sd - sd4);
2686  	WRITE_ONCE(rfp->rcu_fwd_startat, jiffies);
2687  	stopat = rfp->rcu_fwd_startat + dur;
2688  	while (time_before(jiffies, stopat) &&
2689  	       !shutdown_time_arrived() &&
2690  	       !READ_ONCE(rcu_fwd_emergency_stop) && !torture_must_stop()) {
2691  		idx = cur_ops->readlock();
2692  		udelay(10);
2693  		cur_ops->readunlock(idx);
2694  		if (!fwd_progress_need_resched || need_resched())
2695  			cond_resched();
2696  	}
2697  	(*tested_tries)++;
2698  	if (!time_before(jiffies, stopat) &&
2699  	    !shutdown_time_arrived() &&
2700  	    !READ_ONCE(rcu_fwd_emergency_stop) && !torture_must_stop()) {
2701  		(*tested)++;
2702  		cver = READ_ONCE(rcu_torture_current_version) - cver;
2703  		gps = rcutorture_seq_diff(cur_ops->get_gp_seq(), gps);
2704  		WARN_ON(!cver && gps < 2);
2705  		pr_alert("%s: %d Duration %ld cver %ld gps %ld\n", __func__,
2706  			 rfp->rcu_fwd_id, dur, cver, gps);
2707  	}
2708  	if (selfpropcb) {
2709  		WRITE_ONCE(fcs.stop, 1);
2710  		cur_ops->sync(); /* Wait for running CB to complete. */
2711  		pr_alert("%s: Waiting for CBs: %pS() %d\n", __func__, cur_ops->cb_barrier, rfp->rcu_fwd_id);
2712  		cur_ops->cb_barrier(); /* Wait for queued callbacks. */
2713  	}
2714  
2715  	if (selfpropcb) {
2716  		WARN_ON(READ_ONCE(fcs.stop) != 2);
2717  		destroy_rcu_head_on_stack(&fcs.rh);
2718  	}
2719  	schedule_timeout_uninterruptible(HZ / 10); /* Let kthreads recover. */
2720  	atomic_dec(&rcu_fwd_cb_nodelay);
2721  }
2722  
2723  /* Carry out call_rcu() forward-progress testing. */
rcu_torture_fwd_prog_cr(struct rcu_fwd * rfp)2724  static void rcu_torture_fwd_prog_cr(struct rcu_fwd *rfp)
2725  {
2726  	unsigned long cver;
2727  	unsigned long flags;
2728  	unsigned long gps;
2729  	int i;
2730  	long n_launders;
2731  	long n_launders_cb_snap;
2732  	long n_launders_sa;
2733  	long n_max_cbs;
2734  	long n_max_gps;
2735  	struct rcu_fwd_cb *rfcp;
2736  	struct rcu_fwd_cb *rfcpn;
2737  	unsigned long stopat;
2738  	unsigned long stoppedat;
2739  
2740  	pr_alert("%s: Starting forward-progress test %d\n", __func__, rfp->rcu_fwd_id);
2741  	if (READ_ONCE(rcu_fwd_emergency_stop))
2742  		return; /* Get out of the way quickly, no GP wait! */
2743  	if (!cur_ops->call)
2744  		return; /* Can't do call_rcu() fwd prog without ->call. */
2745  
2746  	/* Loop continuously posting RCU callbacks. */
2747  	atomic_inc(&rcu_fwd_cb_nodelay);
2748  	cur_ops->sync(); /* Later readers see above write. */
2749  	WRITE_ONCE(rfp->rcu_fwd_startat, jiffies);
2750  	stopat = rfp->rcu_fwd_startat + MAX_FWD_CB_JIFFIES;
2751  	n_launders = 0;
2752  	rfp->n_launders_cb = 0; // Hoist initialization for multi-kthread
2753  	n_launders_sa = 0;
2754  	n_max_cbs = 0;
2755  	n_max_gps = 0;
2756  	for (i = 0; i < ARRAY_SIZE(rfp->n_launders_hist); i++)
2757  		rfp->n_launders_hist[i].n_launders = 0;
2758  	cver = READ_ONCE(rcu_torture_current_version);
2759  	gps = cur_ops->get_gp_seq();
2760  	rfp->rcu_launder_gp_seq_start = gps;
2761  	tick_dep_set_task(current, TICK_DEP_BIT_RCU);
2762  	while (time_before(jiffies, stopat) &&
2763  	       !shutdown_time_arrived() &&
2764  	       !READ_ONCE(rcu_fwd_emergency_stop) && !torture_must_stop()) {
2765  		rfcp = READ_ONCE(rfp->rcu_fwd_cb_head);
2766  		rfcpn = NULL;
2767  		if (rfcp)
2768  			rfcpn = READ_ONCE(rfcp->rfc_next);
2769  		if (rfcpn) {
2770  			if (rfcp->rfc_gps >= MIN_FWD_CB_LAUNDERS &&
2771  			    ++n_max_gps >= MIN_FWD_CBS_LAUNDERED)
2772  				break;
2773  			rfp->rcu_fwd_cb_head = rfcpn;
2774  			n_launders++;
2775  			n_launders_sa++;
2776  		} else if (!cur_ops->cbflood_max || cur_ops->cbflood_max > n_max_cbs) {
2777  			rfcp = kmalloc(sizeof(*rfcp), GFP_KERNEL);
2778  			if (WARN_ON_ONCE(!rfcp)) {
2779  				schedule_timeout_interruptible(1);
2780  				continue;
2781  			}
2782  			n_max_cbs++;
2783  			n_launders_sa = 0;
2784  			rfcp->rfc_gps = 0;
2785  			rfcp->rfc_rfp = rfp;
2786  		} else {
2787  			rfcp = NULL;
2788  		}
2789  		if (rfcp)
2790  			cur_ops->call(&rfcp->rh, rcu_torture_fwd_cb_cr);
2791  		rcu_torture_fwd_prog_cond_resched(n_launders + n_max_cbs);
2792  		if (tick_nohz_full_enabled()) {
2793  			local_irq_save(flags);
2794  			rcu_momentary_dyntick_idle();
2795  			local_irq_restore(flags);
2796  		}
2797  	}
2798  	stoppedat = jiffies;
2799  	n_launders_cb_snap = READ_ONCE(rfp->n_launders_cb);
2800  	cver = READ_ONCE(rcu_torture_current_version) - cver;
2801  	gps = rcutorture_seq_diff(cur_ops->get_gp_seq(), gps);
2802  	pr_alert("%s: Waiting for CBs: %pS() %d\n", __func__, cur_ops->cb_barrier, rfp->rcu_fwd_id);
2803  	cur_ops->cb_barrier(); /* Wait for callbacks to be invoked. */
2804  	(void)rcu_torture_fwd_prog_cbfree(rfp);
2805  
2806  	if (!torture_must_stop() && !READ_ONCE(rcu_fwd_emergency_stop) &&
2807  	    !shutdown_time_arrived()) {
2808  		WARN_ON(n_max_gps < MIN_FWD_CBS_LAUNDERED);
2809  		pr_alert("%s Duration %lu barrier: %lu pending %ld n_launders: %ld n_launders_sa: %ld n_max_gps: %ld n_max_cbs: %ld cver %ld gps %ld\n",
2810  			 __func__,
2811  			 stoppedat - rfp->rcu_fwd_startat, jiffies - stoppedat,
2812  			 n_launders + n_max_cbs - n_launders_cb_snap,
2813  			 n_launders, n_launders_sa,
2814  			 n_max_gps, n_max_cbs, cver, gps);
2815  		atomic_long_add(n_max_cbs, &rcu_fwd_max_cbs);
2816  		mutex_lock(&rcu_fwd_mutex); // Serialize histograms.
2817  		rcu_torture_fwd_cb_hist(rfp);
2818  		mutex_unlock(&rcu_fwd_mutex);
2819  	}
2820  	schedule_timeout_uninterruptible(HZ); /* Let CBs drain. */
2821  	tick_dep_clear_task(current, TICK_DEP_BIT_RCU);
2822  	atomic_dec(&rcu_fwd_cb_nodelay);
2823  }
2824  
2825  
2826  /*
2827   * OOM notifier, but this only prints diagnostic information for the
2828   * current forward-progress test.
2829   */
rcutorture_oom_notify(struct notifier_block * self,unsigned long notused,void * nfreed)2830  static int rcutorture_oom_notify(struct notifier_block *self,
2831  				 unsigned long notused, void *nfreed)
2832  {
2833  	int i;
2834  	long ncbs;
2835  	struct rcu_fwd *rfp;
2836  
2837  	mutex_lock(&rcu_fwd_mutex);
2838  	rfp = rcu_fwds;
2839  	if (!rfp) {
2840  		mutex_unlock(&rcu_fwd_mutex);
2841  		return NOTIFY_OK;
2842  	}
2843  	WARN(1, "%s invoked upon OOM during forward-progress testing.\n",
2844  	     __func__);
2845  	for (i = 0; i < fwd_progress; i++) {
2846  		rcu_torture_fwd_cb_hist(&rfp[i]);
2847  		rcu_fwd_progress_check(1 + (jiffies - READ_ONCE(rfp[i].rcu_fwd_startat)) / 2);
2848  	}
2849  	WRITE_ONCE(rcu_fwd_emergency_stop, true);
2850  	smp_mb(); /* Emergency stop before free and wait to avoid hangs. */
2851  	ncbs = 0;
2852  	for (i = 0; i < fwd_progress; i++)
2853  		ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
2854  	pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
2855  	cur_ops->cb_barrier();
2856  	ncbs = 0;
2857  	for (i = 0; i < fwd_progress; i++)
2858  		ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
2859  	pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
2860  	cur_ops->cb_barrier();
2861  	ncbs = 0;
2862  	for (i = 0; i < fwd_progress; i++)
2863  		ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
2864  	pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
2865  	smp_mb(); /* Frees before return to avoid redoing OOM. */
2866  	(*(unsigned long *)nfreed)++; /* Forward progress CBs freed! */
2867  	pr_info("%s returning after OOM processing.\n", __func__);
2868  	mutex_unlock(&rcu_fwd_mutex);
2869  	return NOTIFY_OK;
2870  }
2871  
2872  static struct notifier_block rcutorture_oom_nb = {
2873  	.notifier_call = rcutorture_oom_notify
2874  };
2875  
2876  /* Carry out grace-period forward-progress testing. */
rcu_torture_fwd_prog(void * args)2877  static int rcu_torture_fwd_prog(void *args)
2878  {
2879  	bool firsttime = true;
2880  	long max_cbs;
2881  	int oldnice = task_nice(current);
2882  	unsigned long oldseq = READ_ONCE(rcu_fwd_seq);
2883  	struct rcu_fwd *rfp = args;
2884  	int tested = 0;
2885  	int tested_tries = 0;
2886  
2887  	VERBOSE_TOROUT_STRING("rcu_torture_fwd_progress task started");
2888  	rcu_bind_current_to_nocb();
2889  	if (!IS_ENABLED(CONFIG_SMP) || !IS_ENABLED(CONFIG_RCU_BOOST))
2890  		set_user_nice(current, MAX_NICE);
2891  	do {
2892  		if (!rfp->rcu_fwd_id) {
2893  			schedule_timeout_interruptible(fwd_progress_holdoff * HZ);
2894  			WRITE_ONCE(rcu_fwd_emergency_stop, false);
2895  			if (!firsttime) {
2896  				max_cbs = atomic_long_xchg(&rcu_fwd_max_cbs, 0);
2897  				pr_alert("%s n_max_cbs: %ld\n", __func__, max_cbs);
2898  			}
2899  			firsttime = false;
2900  			WRITE_ONCE(rcu_fwd_seq, rcu_fwd_seq + 1);
2901  		} else {
2902  			while (READ_ONCE(rcu_fwd_seq) == oldseq && !torture_must_stop())
2903  				schedule_timeout_interruptible(1);
2904  			oldseq = READ_ONCE(rcu_fwd_seq);
2905  		}
2906  		pr_alert("%s: Starting forward-progress test %d\n", __func__, rfp->rcu_fwd_id);
2907  		if (rcu_inkernel_boot_has_ended() && torture_num_online_cpus() > rfp->rcu_fwd_id)
2908  			rcu_torture_fwd_prog_cr(rfp);
2909  		if ((cur_ops->stall_dur && cur_ops->stall_dur() > 0) &&
2910  		    (!IS_ENABLED(CONFIG_TINY_RCU) ||
2911  		     (rcu_inkernel_boot_has_ended() &&
2912  		      torture_num_online_cpus() > rfp->rcu_fwd_id)))
2913  			rcu_torture_fwd_prog_nr(rfp, &tested, &tested_tries);
2914  
2915  		/* Avoid slow periods, better to test when busy. */
2916  		if (stutter_wait("rcu_torture_fwd_prog"))
2917  			sched_set_normal(current, oldnice);
2918  	} while (!torture_must_stop());
2919  	/* Short runs might not contain a valid forward-progress attempt. */
2920  	if (!rfp->rcu_fwd_id) {
2921  		WARN_ON(!tested && tested_tries >= 5);
2922  		pr_alert("%s: tested %d tested_tries %d\n", __func__, tested, tested_tries);
2923  	}
2924  	torture_kthread_stopping("rcu_torture_fwd_prog");
2925  	return 0;
2926  }
2927  
2928  /* If forward-progress checking is requested and feasible, spawn the thread. */
rcu_torture_fwd_prog_init(void)2929  static int __init rcu_torture_fwd_prog_init(void)
2930  {
2931  	int i;
2932  	int ret = 0;
2933  	struct rcu_fwd *rfp;
2934  
2935  	if (!fwd_progress)
2936  		return 0; /* Not requested, so don't do it. */
2937  	if (fwd_progress >= nr_cpu_ids) {
2938  		VERBOSE_TOROUT_STRING("rcu_torture_fwd_prog_init: Limiting fwd_progress to # CPUs.\n");
2939  		fwd_progress = nr_cpu_ids;
2940  	} else if (fwd_progress < 0) {
2941  		fwd_progress = nr_cpu_ids;
2942  	}
2943  	if ((!cur_ops->sync && !cur_ops->call) ||
2944  	    (!cur_ops->cbflood_max && (!cur_ops->stall_dur || cur_ops->stall_dur() <= 0)) ||
2945  	    cur_ops == &rcu_busted_ops) {
2946  		VERBOSE_TOROUT_STRING("rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test");
2947  		fwd_progress = 0;
2948  		return 0;
2949  	}
2950  	if (stall_cpu > 0) {
2951  		VERBOSE_TOROUT_STRING("rcu_torture_fwd_prog_init: Disabled, conflicts with CPU-stall testing");
2952  		fwd_progress = 0;
2953  		if (IS_MODULE(CONFIG_RCU_TORTURE_TEST))
2954  			return -EINVAL; /* In module, can fail back to user. */
2955  		WARN_ON(1); /* Make sure rcutorture notices conflict. */
2956  		return 0;
2957  	}
2958  	if (fwd_progress_holdoff <= 0)
2959  		fwd_progress_holdoff = 1;
2960  	if (fwd_progress_div <= 0)
2961  		fwd_progress_div = 4;
2962  	rfp = kcalloc(fwd_progress, sizeof(*rfp), GFP_KERNEL);
2963  	fwd_prog_tasks = kcalloc(fwd_progress, sizeof(*fwd_prog_tasks), GFP_KERNEL);
2964  	if (!rfp || !fwd_prog_tasks) {
2965  		kfree(rfp);
2966  		kfree(fwd_prog_tasks);
2967  		fwd_prog_tasks = NULL;
2968  		fwd_progress = 0;
2969  		return -ENOMEM;
2970  	}
2971  	for (i = 0; i < fwd_progress; i++) {
2972  		spin_lock_init(&rfp[i].rcu_fwd_lock);
2973  		rfp[i].rcu_fwd_cb_tail = &rfp[i].rcu_fwd_cb_head;
2974  		rfp[i].rcu_fwd_id = i;
2975  	}
2976  	mutex_lock(&rcu_fwd_mutex);
2977  	rcu_fwds = rfp;
2978  	mutex_unlock(&rcu_fwd_mutex);
2979  	register_oom_notifier(&rcutorture_oom_nb);
2980  	for (i = 0; i < fwd_progress; i++) {
2981  		ret = torture_create_kthread(rcu_torture_fwd_prog, &rcu_fwds[i], fwd_prog_tasks[i]);
2982  		if (ret) {
2983  			fwd_progress = i;
2984  			return ret;
2985  		}
2986  	}
2987  	return 0;
2988  }
2989  
rcu_torture_fwd_prog_cleanup(void)2990  static void rcu_torture_fwd_prog_cleanup(void)
2991  {
2992  	int i;
2993  	struct rcu_fwd *rfp;
2994  
2995  	if (!rcu_fwds || !fwd_prog_tasks)
2996  		return;
2997  	for (i = 0; i < fwd_progress; i++)
2998  		torture_stop_kthread(rcu_torture_fwd_prog, fwd_prog_tasks[i]);
2999  	unregister_oom_notifier(&rcutorture_oom_nb);
3000  	mutex_lock(&rcu_fwd_mutex);
3001  	rfp = rcu_fwds;
3002  	rcu_fwds = NULL;
3003  	mutex_unlock(&rcu_fwd_mutex);
3004  	kfree(rfp);
3005  	kfree(fwd_prog_tasks);
3006  	fwd_prog_tasks = NULL;
3007  }
3008  
3009  /* Callback function for RCU barrier testing. */
rcu_torture_barrier_cbf(struct rcu_head * rcu)3010  static void rcu_torture_barrier_cbf(struct rcu_head *rcu)
3011  {
3012  	atomic_inc(&barrier_cbs_invoked);
3013  }
3014  
3015  /* IPI handler to get callback posted on desired CPU, if online. */
rcu_torture_barrier1cb(void * rcu_void)3016  static int rcu_torture_barrier1cb(void *rcu_void)
3017  {
3018  	struct rcu_head *rhp = rcu_void;
3019  
3020  	cur_ops->call(rhp, rcu_torture_barrier_cbf);
3021  	return 0;
3022  }
3023  
3024  /* kthread function to register callbacks used to test RCU barriers. */
rcu_torture_barrier_cbs(void * arg)3025  static int rcu_torture_barrier_cbs(void *arg)
3026  {
3027  	long myid = (long)arg;
3028  	bool lastphase = false;
3029  	bool newphase;
3030  	struct rcu_head rcu;
3031  
3032  	init_rcu_head_on_stack(&rcu);
3033  	VERBOSE_TOROUT_STRING("rcu_torture_barrier_cbs task started");
3034  	set_user_nice(current, MAX_NICE);
3035  	do {
3036  		wait_event(barrier_cbs_wq[myid],
3037  			   (newphase =
3038  			    smp_load_acquire(&barrier_phase)) != lastphase ||
3039  			   torture_must_stop());
3040  		lastphase = newphase;
3041  		if (torture_must_stop())
3042  			break;
3043  		/*
3044  		 * The above smp_load_acquire() ensures barrier_phase load
3045  		 * is ordered before the following ->call().
3046  		 */
3047  		if (smp_call_on_cpu(myid, rcu_torture_barrier1cb, &rcu, 1))
3048  			cur_ops->call(&rcu, rcu_torture_barrier_cbf);
3049  
3050  		if (atomic_dec_and_test(&barrier_cbs_count))
3051  			wake_up(&barrier_wq);
3052  	} while (!torture_must_stop());
3053  	if (cur_ops->cb_barrier != NULL)
3054  		cur_ops->cb_barrier();
3055  	destroy_rcu_head_on_stack(&rcu);
3056  	torture_kthread_stopping("rcu_torture_barrier_cbs");
3057  	return 0;
3058  }
3059  
3060  /* kthread function to drive and coordinate RCU barrier testing. */
rcu_torture_barrier(void * arg)3061  static int rcu_torture_barrier(void *arg)
3062  {
3063  	int i;
3064  
3065  	VERBOSE_TOROUT_STRING("rcu_torture_barrier task starting");
3066  	do {
3067  		atomic_set(&barrier_cbs_invoked, 0);
3068  		atomic_set(&barrier_cbs_count, n_barrier_cbs);
3069  		/* Ensure barrier_phase ordered after prior assignments. */
3070  		smp_store_release(&barrier_phase, !barrier_phase);
3071  		for (i = 0; i < n_barrier_cbs; i++)
3072  			wake_up(&barrier_cbs_wq[i]);
3073  		wait_event(barrier_wq,
3074  			   atomic_read(&barrier_cbs_count) == 0 ||
3075  			   torture_must_stop());
3076  		if (torture_must_stop())
3077  			break;
3078  		n_barrier_attempts++;
3079  		cur_ops->cb_barrier(); /* Implies smp_mb() for wait_event(). */
3080  		if (atomic_read(&barrier_cbs_invoked) != n_barrier_cbs) {
3081  			n_rcu_torture_barrier_error++;
3082  			pr_err("barrier_cbs_invoked = %d, n_barrier_cbs = %d\n",
3083  			       atomic_read(&barrier_cbs_invoked),
3084  			       n_barrier_cbs);
3085  			WARN_ON(1);
3086  			// Wait manually for the remaining callbacks
3087  			i = 0;
3088  			do {
3089  				if (WARN_ON(i++ > HZ))
3090  					i = INT_MIN;
3091  				schedule_timeout_interruptible(1);
3092  				cur_ops->cb_barrier();
3093  			} while (atomic_read(&barrier_cbs_invoked) !=
3094  				 n_barrier_cbs &&
3095  				 !torture_must_stop());
3096  			smp_mb(); // Can't trust ordering if broken.
3097  			if (!torture_must_stop())
3098  				pr_err("Recovered: barrier_cbs_invoked = %d\n",
3099  				       atomic_read(&barrier_cbs_invoked));
3100  		} else {
3101  			n_barrier_successes++;
3102  		}
3103  		schedule_timeout_interruptible(HZ / 10);
3104  	} while (!torture_must_stop());
3105  	torture_kthread_stopping("rcu_torture_barrier");
3106  	return 0;
3107  }
3108  
3109  /* Initialize RCU barrier testing. */
rcu_torture_barrier_init(void)3110  static int rcu_torture_barrier_init(void)
3111  {
3112  	int i;
3113  	int ret;
3114  
3115  	if (n_barrier_cbs <= 0)
3116  		return 0;
3117  	if (cur_ops->call == NULL || cur_ops->cb_barrier == NULL) {
3118  		pr_alert("%s" TORTURE_FLAG
3119  			 " Call or barrier ops missing for %s,\n",
3120  			 torture_type, cur_ops->name);
3121  		pr_alert("%s" TORTURE_FLAG
3122  			 " RCU barrier testing omitted from run.\n",
3123  			 torture_type);
3124  		return 0;
3125  	}
3126  	atomic_set(&barrier_cbs_count, 0);
3127  	atomic_set(&barrier_cbs_invoked, 0);
3128  	barrier_cbs_tasks =
3129  		kcalloc(n_barrier_cbs, sizeof(barrier_cbs_tasks[0]),
3130  			GFP_KERNEL);
3131  	barrier_cbs_wq =
3132  		kcalloc(n_barrier_cbs, sizeof(barrier_cbs_wq[0]), GFP_KERNEL);
3133  	if (barrier_cbs_tasks == NULL || !barrier_cbs_wq)
3134  		return -ENOMEM;
3135  	for (i = 0; i < n_barrier_cbs; i++) {
3136  		init_waitqueue_head(&barrier_cbs_wq[i]);
3137  		ret = torture_create_kthread(rcu_torture_barrier_cbs,
3138  					     (void *)(long)i,
3139  					     barrier_cbs_tasks[i]);
3140  		if (ret)
3141  			return ret;
3142  	}
3143  	return torture_create_kthread(rcu_torture_barrier, NULL, barrier_task);
3144  }
3145  
3146  /* Clean up after RCU barrier testing. */
rcu_torture_barrier_cleanup(void)3147  static void rcu_torture_barrier_cleanup(void)
3148  {
3149  	int i;
3150  
3151  	torture_stop_kthread(rcu_torture_barrier, barrier_task);
3152  	if (barrier_cbs_tasks != NULL) {
3153  		for (i = 0; i < n_barrier_cbs; i++)
3154  			torture_stop_kthread(rcu_torture_barrier_cbs,
3155  					     barrier_cbs_tasks[i]);
3156  		kfree(barrier_cbs_tasks);
3157  		barrier_cbs_tasks = NULL;
3158  	}
3159  	if (barrier_cbs_wq != NULL) {
3160  		kfree(barrier_cbs_wq);
3161  		barrier_cbs_wq = NULL;
3162  	}
3163  }
3164  
rcu_torture_can_boost(void)3165  static bool rcu_torture_can_boost(void)
3166  {
3167  	static int boost_warn_once;
3168  	int prio;
3169  
3170  	if (!(test_boost == 1 && cur_ops->can_boost) && test_boost != 2)
3171  		return false;
3172  	if (!cur_ops->start_gp_poll || !cur_ops->poll_gp_state)
3173  		return false;
3174  
3175  	prio = rcu_get_gp_kthreads_prio();
3176  	if (!prio)
3177  		return false;
3178  
3179  	if (prio < 2) {
3180  		if (boost_warn_once == 1)
3181  			return false;
3182  
3183  		pr_alert("%s: WARN: RCU kthread priority too low to test boosting.  Skipping RCU boost test. Try passing rcutree.kthread_prio > 1 on the kernel command line.\n", KBUILD_MODNAME);
3184  		boost_warn_once = 1;
3185  		return false;
3186  	}
3187  
3188  	return true;
3189  }
3190  
3191  static bool read_exit_child_stop;
3192  static bool read_exit_child_stopped;
3193  static wait_queue_head_t read_exit_wq;
3194  
3195  // Child kthread which just does an rcutorture reader and exits.
rcu_torture_read_exit_child(void * trsp_in)3196  static int rcu_torture_read_exit_child(void *trsp_in)
3197  {
3198  	struct torture_random_state *trsp = trsp_in;
3199  
3200  	set_user_nice(current, MAX_NICE);
3201  	// Minimize time between reading and exiting.
3202  	while (!kthread_should_stop())
3203  		schedule_timeout_uninterruptible(1);
3204  	(void)rcu_torture_one_read(trsp, -1);
3205  	return 0;
3206  }
3207  
3208  // Parent kthread which creates and destroys read-exit child kthreads.
rcu_torture_read_exit(void * unused)3209  static int rcu_torture_read_exit(void *unused)
3210  {
3211  	bool errexit = false;
3212  	int i;
3213  	struct task_struct *tsp;
3214  	DEFINE_TORTURE_RANDOM(trs);
3215  
3216  	// Allocate and initialize.
3217  	set_user_nice(current, MAX_NICE);
3218  	VERBOSE_TOROUT_STRING("rcu_torture_read_exit: Start of test");
3219  
3220  	// Each pass through this loop does one read-exit episode.
3221  	do {
3222  		VERBOSE_TOROUT_STRING("rcu_torture_read_exit: Start of episode");
3223  		for (i = 0; i < read_exit_burst; i++) {
3224  			if (READ_ONCE(read_exit_child_stop))
3225  				break;
3226  			stutter_wait("rcu_torture_read_exit");
3227  			// Spawn child.
3228  			tsp = kthread_run(rcu_torture_read_exit_child,
3229  					  &trs, "%s", "rcu_torture_read_exit_child");
3230  			if (IS_ERR(tsp)) {
3231  				TOROUT_ERRSTRING("out of memory");
3232  				errexit = true;
3233  				break;
3234  			}
3235  			cond_resched();
3236  			kthread_stop(tsp);
3237  			n_read_exits++;
3238  		}
3239  		VERBOSE_TOROUT_STRING("rcu_torture_read_exit: End of episode");
3240  		rcu_barrier(); // Wait for task_struct free, avoid OOM.
3241  		i = 0;
3242  		for (; !errexit && !READ_ONCE(read_exit_child_stop) && i < read_exit_delay; i++)
3243  			schedule_timeout_uninterruptible(HZ);
3244  	} while (!errexit && !READ_ONCE(read_exit_child_stop));
3245  
3246  	// Clean up and exit.
3247  	smp_store_release(&read_exit_child_stopped, true); // After reaping.
3248  	smp_mb(); // Store before wakeup.
3249  	wake_up(&read_exit_wq);
3250  	while (!torture_must_stop())
3251  		schedule_timeout_uninterruptible(1);
3252  	torture_kthread_stopping("rcu_torture_read_exit");
3253  	return 0;
3254  }
3255  
rcu_torture_read_exit_init(void)3256  static int rcu_torture_read_exit_init(void)
3257  {
3258  	if (read_exit_burst <= 0)
3259  		return 0;
3260  	init_waitqueue_head(&read_exit_wq);
3261  	read_exit_child_stop = false;
3262  	read_exit_child_stopped = false;
3263  	return torture_create_kthread(rcu_torture_read_exit, NULL,
3264  				      read_exit_task);
3265  }
3266  
rcu_torture_read_exit_cleanup(void)3267  static void rcu_torture_read_exit_cleanup(void)
3268  {
3269  	if (!read_exit_task)
3270  		return;
3271  	WRITE_ONCE(read_exit_child_stop, true);
3272  	smp_mb(); // Above write before wait.
3273  	wait_event(read_exit_wq, smp_load_acquire(&read_exit_child_stopped));
3274  	torture_stop_kthread(rcutorture_read_exit, read_exit_task);
3275  }
3276  
rcutorture_test_nmis(int n)3277  static void rcutorture_test_nmis(int n)
3278  {
3279  #if IS_BUILTIN(CONFIG_RCU_TORTURE_TEST)
3280  	int cpu;
3281  	int dumpcpu;
3282  	int i;
3283  
3284  	for (i = 0; i < n; i++) {
3285  		preempt_disable();
3286  		cpu = smp_processor_id();
3287  		dumpcpu = cpu + 1;
3288  		if (dumpcpu >= nr_cpu_ids)
3289  			dumpcpu = 0;
3290  		pr_alert("%s: CPU %d invoking dump_cpu_task(%d)\n", __func__, cpu, dumpcpu);
3291  		dump_cpu_task(dumpcpu);
3292  		preempt_enable();
3293  		schedule_timeout_uninterruptible(15 * HZ);
3294  	}
3295  #else // #if IS_BUILTIN(CONFIG_RCU_TORTURE_TEST)
3296  	WARN_ONCE(n, "Non-zero rcutorture.test_nmis=%d permitted only when rcutorture is built in.\n", test_nmis);
3297  #endif // #else // #if IS_BUILTIN(CONFIG_RCU_TORTURE_TEST)
3298  }
3299  
3300  static enum cpuhp_state rcutor_hp;
3301  
3302  static void
rcu_torture_cleanup(void)3303  rcu_torture_cleanup(void)
3304  {
3305  	int firsttime;
3306  	int flags = 0;
3307  	unsigned long gp_seq = 0;
3308  	int i;
3309  
3310  	if (torture_cleanup_begin()) {
3311  		if (cur_ops->cb_barrier != NULL) {
3312  			pr_info("%s: Invoking %pS().\n", __func__, cur_ops->cb_barrier);
3313  			cur_ops->cb_barrier();
3314  		}
3315  		rcu_gp_slow_unregister(NULL);
3316  		return;
3317  	}
3318  	if (!cur_ops) {
3319  		torture_cleanup_end();
3320  		rcu_gp_slow_unregister(NULL);
3321  		return;
3322  	}
3323  
3324  	rcutorture_test_nmis(test_nmis);
3325  
3326  	if (cur_ops->gp_kthread_dbg)
3327  		cur_ops->gp_kthread_dbg();
3328  	rcu_torture_read_exit_cleanup();
3329  	rcu_torture_barrier_cleanup();
3330  	rcu_torture_fwd_prog_cleanup();
3331  	torture_stop_kthread(rcu_torture_stall, stall_task);
3332  	torture_stop_kthread(rcu_torture_writer, writer_task);
3333  
3334  	if (nocb_tasks) {
3335  		for (i = 0; i < nrealnocbers; i++)
3336  			torture_stop_kthread(rcu_nocb_toggle, nocb_tasks[i]);
3337  		kfree(nocb_tasks);
3338  		nocb_tasks = NULL;
3339  	}
3340  
3341  	if (reader_tasks) {
3342  		for (i = 0; i < nrealreaders; i++)
3343  			torture_stop_kthread(rcu_torture_reader,
3344  					     reader_tasks[i]);
3345  		kfree(reader_tasks);
3346  		reader_tasks = NULL;
3347  	}
3348  	kfree(rcu_torture_reader_mbchk);
3349  	rcu_torture_reader_mbchk = NULL;
3350  
3351  	if (fakewriter_tasks) {
3352  		for (i = 0; i < nfakewriters; i++)
3353  			torture_stop_kthread(rcu_torture_fakewriter,
3354  					     fakewriter_tasks[i]);
3355  		kfree(fakewriter_tasks);
3356  		fakewriter_tasks = NULL;
3357  	}
3358  
3359  	rcutorture_get_gp_data(cur_ops->ttype, &flags, &gp_seq);
3360  	srcutorture_get_gp_data(cur_ops->ttype, srcu_ctlp, &flags, &gp_seq);
3361  	pr_alert("%s:  End-test grace-period state: g%ld f%#x total-gps=%ld\n",
3362  		 cur_ops->name, (long)gp_seq, flags,
3363  		 rcutorture_seq_diff(gp_seq, start_gp_seq));
3364  	torture_stop_kthread(rcu_torture_stats, stats_task);
3365  	torture_stop_kthread(rcu_torture_fqs, fqs_task);
3366  	if (rcu_torture_can_boost() && rcutor_hp >= 0)
3367  		cpuhp_remove_state(rcutor_hp);
3368  
3369  	/*
3370  	 * Wait for all RCU callbacks to fire, then do torture-type-specific
3371  	 * cleanup operations.
3372  	 */
3373  	if (cur_ops->cb_barrier != NULL) {
3374  		pr_info("%s: Invoking %pS().\n", __func__, cur_ops->cb_barrier);
3375  		cur_ops->cb_barrier();
3376  	}
3377  	if (cur_ops->cleanup != NULL)
3378  		cur_ops->cleanup();
3379  
3380  	rcu_torture_mem_dump_obj();
3381  
3382  	rcu_torture_stats_print();  /* -After- the stats thread is stopped! */
3383  
3384  	if (err_segs_recorded) {
3385  		pr_alert("Failure/close-call rcutorture reader segments:\n");
3386  		if (rt_read_nsegs == 0)
3387  			pr_alert("\t: No segments recorded!!!\n");
3388  		firsttime = 1;
3389  		for (i = 0; i < rt_read_nsegs; i++) {
3390  			pr_alert("\t%d: %#x ", i, err_segs[i].rt_readstate);
3391  			if (err_segs[i].rt_delay_jiffies != 0) {
3392  				pr_cont("%s%ldjiffies", firsttime ? "" : "+",
3393  					err_segs[i].rt_delay_jiffies);
3394  				firsttime = 0;
3395  			}
3396  			if (err_segs[i].rt_delay_ms != 0) {
3397  				pr_cont("%s%ldms", firsttime ? "" : "+",
3398  					err_segs[i].rt_delay_ms);
3399  				firsttime = 0;
3400  			}
3401  			if (err_segs[i].rt_delay_us != 0) {
3402  				pr_cont("%s%ldus", firsttime ? "" : "+",
3403  					err_segs[i].rt_delay_us);
3404  				firsttime = 0;
3405  			}
3406  			pr_cont("%s\n",
3407  				err_segs[i].rt_preempted ? "preempted" : "");
3408  
3409  		}
3410  	}
3411  	if (atomic_read(&n_rcu_torture_error) || n_rcu_torture_barrier_error)
3412  		rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
3413  	else if (torture_onoff_failures())
3414  		rcu_torture_print_module_parms(cur_ops,
3415  					       "End of test: RCU_HOTPLUG");
3416  	else
3417  		rcu_torture_print_module_parms(cur_ops, "End of test: SUCCESS");
3418  	torture_cleanup_end();
3419  	rcu_gp_slow_unregister(&rcu_fwd_cb_nodelay);
3420  }
3421  
3422  #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD
rcu_torture_leak_cb(struct rcu_head * rhp)3423  static void rcu_torture_leak_cb(struct rcu_head *rhp)
3424  {
3425  }
3426  
rcu_torture_err_cb(struct rcu_head * rhp)3427  static void rcu_torture_err_cb(struct rcu_head *rhp)
3428  {
3429  	/*
3430  	 * This -might- happen due to race conditions, but is unlikely.
3431  	 * The scenario that leads to this happening is that the
3432  	 * first of the pair of duplicate callbacks is queued,
3433  	 * someone else starts a grace period that includes that
3434  	 * callback, then the second of the pair must wait for the
3435  	 * next grace period.  Unlikely, but can happen.  If it
3436  	 * does happen, the debug-objects subsystem won't have splatted.
3437  	 */
3438  	pr_alert("%s: duplicated callback was invoked.\n", KBUILD_MODNAME);
3439  }
3440  #endif /* #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
3441  
3442  /*
3443   * Verify that double-free causes debug-objects to complain, but only
3444   * if CONFIG_DEBUG_OBJECTS_RCU_HEAD=y.  Otherwise, say that the test
3445   * cannot be carried out.
3446   */
rcu_test_debug_objects(void)3447  static void rcu_test_debug_objects(void)
3448  {
3449  #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD
3450  	struct rcu_head rh1;
3451  	struct rcu_head rh2;
3452  	struct rcu_head *rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
3453  
3454  	init_rcu_head_on_stack(&rh1);
3455  	init_rcu_head_on_stack(&rh2);
3456  	pr_alert("%s: WARN: Duplicate call_rcu() test starting.\n", KBUILD_MODNAME);
3457  
3458  	/* Try to queue the rh2 pair of callbacks for the same grace period. */
3459  	preempt_disable(); /* Prevent preemption from interrupting test. */
3460  	rcu_read_lock(); /* Make it impossible to finish a grace period. */
3461  	call_rcu_hurry(&rh1, rcu_torture_leak_cb); /* Start grace period. */
3462  	local_irq_disable(); /* Make it harder to start a new grace period. */
3463  	call_rcu_hurry(&rh2, rcu_torture_leak_cb);
3464  	call_rcu_hurry(&rh2, rcu_torture_err_cb); /* Duplicate callback. */
3465  	if (rhp) {
3466  		call_rcu_hurry(rhp, rcu_torture_leak_cb);
3467  		call_rcu_hurry(rhp, rcu_torture_err_cb); /* Another duplicate callback. */
3468  	}
3469  	local_irq_enable();
3470  	rcu_read_unlock();
3471  	preempt_enable();
3472  
3473  	/* Wait for them all to get done so we can safely return. */
3474  	rcu_barrier();
3475  	pr_alert("%s: WARN: Duplicate call_rcu() test complete.\n", KBUILD_MODNAME);
3476  	destroy_rcu_head_on_stack(&rh1);
3477  	destroy_rcu_head_on_stack(&rh2);
3478  	kfree(rhp);
3479  #else /* #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
3480  	pr_alert("%s: !CONFIG_DEBUG_OBJECTS_RCU_HEAD, not testing duplicate call_rcu()\n", KBUILD_MODNAME);
3481  #endif /* #else #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
3482  }
3483  
rcutorture_sync(void)3484  static void rcutorture_sync(void)
3485  {
3486  	static unsigned long n;
3487  
3488  	if (cur_ops->sync && !(++n & 0xfff))
3489  		cur_ops->sync();
3490  }
3491  
3492  static DEFINE_MUTEX(mut0);
3493  static DEFINE_MUTEX(mut1);
3494  static DEFINE_MUTEX(mut2);
3495  static DEFINE_MUTEX(mut3);
3496  static DEFINE_MUTEX(mut4);
3497  static DEFINE_MUTEX(mut5);
3498  static DEFINE_MUTEX(mut6);
3499  static DEFINE_MUTEX(mut7);
3500  static DEFINE_MUTEX(mut8);
3501  static DEFINE_MUTEX(mut9);
3502  
3503  static DECLARE_RWSEM(rwsem0);
3504  static DECLARE_RWSEM(rwsem1);
3505  static DECLARE_RWSEM(rwsem2);
3506  static DECLARE_RWSEM(rwsem3);
3507  static DECLARE_RWSEM(rwsem4);
3508  static DECLARE_RWSEM(rwsem5);
3509  static DECLARE_RWSEM(rwsem6);
3510  static DECLARE_RWSEM(rwsem7);
3511  static DECLARE_RWSEM(rwsem8);
3512  static DECLARE_RWSEM(rwsem9);
3513  
3514  DEFINE_STATIC_SRCU(srcu0);
3515  DEFINE_STATIC_SRCU(srcu1);
3516  DEFINE_STATIC_SRCU(srcu2);
3517  DEFINE_STATIC_SRCU(srcu3);
3518  DEFINE_STATIC_SRCU(srcu4);
3519  DEFINE_STATIC_SRCU(srcu5);
3520  DEFINE_STATIC_SRCU(srcu6);
3521  DEFINE_STATIC_SRCU(srcu7);
3522  DEFINE_STATIC_SRCU(srcu8);
3523  DEFINE_STATIC_SRCU(srcu9);
3524  
srcu_lockdep_next(const char * f,const char * fl,const char * fs,const char * fu,int i,int cyclelen,int deadlock)3525  static int srcu_lockdep_next(const char *f, const char *fl, const char *fs, const char *fu, int i,
3526  			     int cyclelen, int deadlock)
3527  {
3528  	int j = i + 1;
3529  
3530  	if (j >= cyclelen)
3531  		j = deadlock ? 0 : -1;
3532  	if (j >= 0)
3533  		pr_info("%s: %s(%d), %s(%d), %s(%d)\n", f, fl, i, fs, j, fu, i);
3534  	else
3535  		pr_info("%s: %s(%d), %s(%d)\n", f, fl, i, fu, i);
3536  	return j;
3537  }
3538  
3539  // Test lockdep on SRCU-based deadlock scenarios.
rcu_torture_init_srcu_lockdep(void)3540  static void rcu_torture_init_srcu_lockdep(void)
3541  {
3542  	int cyclelen;
3543  	int deadlock;
3544  	bool err = false;
3545  	int i;
3546  	int j;
3547  	int idx;
3548  	struct mutex *muts[] = { &mut0, &mut1, &mut2, &mut3, &mut4,
3549  				 &mut5, &mut6, &mut7, &mut8, &mut9 };
3550  	struct rw_semaphore *rwsems[] = { &rwsem0, &rwsem1, &rwsem2, &rwsem3, &rwsem4,
3551  					  &rwsem5, &rwsem6, &rwsem7, &rwsem8, &rwsem9 };
3552  	struct srcu_struct *srcus[] = { &srcu0, &srcu1, &srcu2, &srcu3, &srcu4,
3553  					&srcu5, &srcu6, &srcu7, &srcu8, &srcu9 };
3554  	int testtype;
3555  
3556  	if (!test_srcu_lockdep)
3557  		return;
3558  
3559  	deadlock = test_srcu_lockdep / 1000;
3560  	testtype = (test_srcu_lockdep / 10) % 100;
3561  	cyclelen = test_srcu_lockdep % 10;
3562  	WARN_ON_ONCE(ARRAY_SIZE(muts) != ARRAY_SIZE(srcus));
3563  	if (WARN_ONCE(deadlock != !!deadlock,
3564  		      "%s: test_srcu_lockdep=%d and deadlock digit %d must be zero or one.\n",
3565  		      __func__, test_srcu_lockdep, deadlock))
3566  		err = true;
3567  	if (WARN_ONCE(cyclelen <= 0,
3568  		      "%s: test_srcu_lockdep=%d and cycle-length digit %d must be greater than zero.\n",
3569  		      __func__, test_srcu_lockdep, cyclelen))
3570  		err = true;
3571  	if (err)
3572  		goto err_out;
3573  
3574  	if (testtype == 0) {
3575  		pr_info("%s: test_srcu_lockdep = %05d: SRCU %d-way %sdeadlock.\n",
3576  			__func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-");
3577  		if (deadlock && cyclelen == 1)
3578  			pr_info("%s: Expect hang.\n", __func__);
3579  		for (i = 0; i < cyclelen; i++) {
3580  			j = srcu_lockdep_next(__func__, "srcu_read_lock", "synchronize_srcu",
3581  					      "srcu_read_unlock", i, cyclelen, deadlock);
3582  			idx = srcu_read_lock(srcus[i]);
3583  			if (j >= 0)
3584  				synchronize_srcu(srcus[j]);
3585  			srcu_read_unlock(srcus[i], idx);
3586  		}
3587  		return;
3588  	}
3589  
3590  	if (testtype == 1) {
3591  		pr_info("%s: test_srcu_lockdep = %05d: SRCU/mutex %d-way %sdeadlock.\n",
3592  			__func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-");
3593  		for (i = 0; i < cyclelen; i++) {
3594  			pr_info("%s: srcu_read_lock(%d), mutex_lock(%d), mutex_unlock(%d), srcu_read_unlock(%d)\n",
3595  				__func__, i, i, i, i);
3596  			idx = srcu_read_lock(srcus[i]);
3597  			mutex_lock(muts[i]);
3598  			mutex_unlock(muts[i]);
3599  			srcu_read_unlock(srcus[i], idx);
3600  
3601  			j = srcu_lockdep_next(__func__, "mutex_lock", "synchronize_srcu",
3602  					      "mutex_unlock", i, cyclelen, deadlock);
3603  			mutex_lock(muts[i]);
3604  			if (j >= 0)
3605  				synchronize_srcu(srcus[j]);
3606  			mutex_unlock(muts[i]);
3607  		}
3608  		return;
3609  	}
3610  
3611  	if (testtype == 2) {
3612  		pr_info("%s: test_srcu_lockdep = %05d: SRCU/rwsem %d-way %sdeadlock.\n",
3613  			__func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-");
3614  		for (i = 0; i < cyclelen; i++) {
3615  			pr_info("%s: srcu_read_lock(%d), down_read(%d), up_read(%d), srcu_read_unlock(%d)\n",
3616  				__func__, i, i, i, i);
3617  			idx = srcu_read_lock(srcus[i]);
3618  			down_read(rwsems[i]);
3619  			up_read(rwsems[i]);
3620  			srcu_read_unlock(srcus[i], idx);
3621  
3622  			j = srcu_lockdep_next(__func__, "down_write", "synchronize_srcu",
3623  					      "up_write", i, cyclelen, deadlock);
3624  			down_write(rwsems[i]);
3625  			if (j >= 0)
3626  				synchronize_srcu(srcus[j]);
3627  			up_write(rwsems[i]);
3628  		}
3629  		return;
3630  	}
3631  
3632  #ifdef CONFIG_TASKS_TRACE_RCU
3633  	if (testtype == 3) {
3634  		pr_info("%s: test_srcu_lockdep = %05d: SRCU and Tasks Trace RCU %d-way %sdeadlock.\n",
3635  			__func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-");
3636  		if (deadlock && cyclelen == 1)
3637  			pr_info("%s: Expect hang.\n", __func__);
3638  		for (i = 0; i < cyclelen; i++) {
3639  			char *fl = i == 0 ? "rcu_read_lock_trace" : "srcu_read_lock";
3640  			char *fs = i == cyclelen - 1 ? "synchronize_rcu_tasks_trace"
3641  						     : "synchronize_srcu";
3642  			char *fu = i == 0 ? "rcu_read_unlock_trace" : "srcu_read_unlock";
3643  
3644  			j = srcu_lockdep_next(__func__, fl, fs, fu, i, cyclelen, deadlock);
3645  			if (i == 0)
3646  				rcu_read_lock_trace();
3647  			else
3648  				idx = srcu_read_lock(srcus[i]);
3649  			if (j >= 0) {
3650  				if (i == cyclelen - 1)
3651  					synchronize_rcu_tasks_trace();
3652  				else
3653  					synchronize_srcu(srcus[j]);
3654  			}
3655  			if (i == 0)
3656  				rcu_read_unlock_trace();
3657  			else
3658  				srcu_read_unlock(srcus[i], idx);
3659  		}
3660  		return;
3661  	}
3662  #endif // #ifdef CONFIG_TASKS_TRACE_RCU
3663  
3664  err_out:
3665  	pr_info("%s: test_srcu_lockdep = %05d does nothing.\n", __func__, test_srcu_lockdep);
3666  	pr_info("%s: test_srcu_lockdep = DNNL.\n", __func__);
3667  	pr_info("%s: D: Deadlock if nonzero.\n", __func__);
3668  	pr_info("%s: NN: Test number, 0=SRCU, 1=SRCU/mutex, 2=SRCU/rwsem, 3=SRCU/Tasks Trace RCU.\n", __func__);
3669  	pr_info("%s: L: Cycle length.\n", __func__);
3670  	if (!IS_ENABLED(CONFIG_TASKS_TRACE_RCU))
3671  		pr_info("%s: NN=3 disallowed because kernel is built with CONFIG_TASKS_TRACE_RCU=n\n", __func__);
3672  }
3673  
3674  static int __init
rcu_torture_init(void)3675  rcu_torture_init(void)
3676  {
3677  	long i;
3678  	int cpu;
3679  	int firsterr = 0;
3680  	int flags = 0;
3681  	unsigned long gp_seq = 0;
3682  	static struct rcu_torture_ops *torture_ops[] = {
3683  		&rcu_ops, &rcu_busted_ops, &srcu_ops, &srcud_ops, &busted_srcud_ops,
3684  		TASKS_OPS TASKS_RUDE_OPS TASKS_TRACING_OPS
3685  		&trivial_ops,
3686  	};
3687  
3688  	if (!torture_init_begin(torture_type, verbose))
3689  		return -EBUSY;
3690  
3691  	/* Process args and tell the world that the torturer is on the job. */
3692  	for (i = 0; i < ARRAY_SIZE(torture_ops); i++) {
3693  		cur_ops = torture_ops[i];
3694  		if (strcmp(torture_type, cur_ops->name) == 0)
3695  			break;
3696  	}
3697  	if (i == ARRAY_SIZE(torture_ops)) {
3698  		pr_alert("rcu-torture: invalid torture type: \"%s\"\n",
3699  			 torture_type);
3700  		pr_alert("rcu-torture types:");
3701  		for (i = 0; i < ARRAY_SIZE(torture_ops); i++)
3702  			pr_cont(" %s", torture_ops[i]->name);
3703  		pr_cont("\n");
3704  		firsterr = -EINVAL;
3705  		cur_ops = NULL;
3706  		goto unwind;
3707  	}
3708  	if (cur_ops->fqs == NULL && fqs_duration != 0) {
3709  		pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n");
3710  		fqs_duration = 0;
3711  	}
3712  	if (nocbs_nthreads != 0 && (cur_ops != &rcu_ops ||
3713  				    !IS_ENABLED(CONFIG_RCU_NOCB_CPU))) {
3714  		pr_alert("rcu-torture types: %s and CONFIG_RCU_NOCB_CPU=%d, nocb toggle disabled.\n",
3715  			 cur_ops->name, IS_ENABLED(CONFIG_RCU_NOCB_CPU));
3716  		nocbs_nthreads = 0;
3717  	}
3718  	if (cur_ops->init)
3719  		cur_ops->init();
3720  
3721  	rcu_torture_init_srcu_lockdep();
3722  
3723  	if (nreaders >= 0) {
3724  		nrealreaders = nreaders;
3725  	} else {
3726  		nrealreaders = num_online_cpus() - 2 - nreaders;
3727  		if (nrealreaders <= 0)
3728  			nrealreaders = 1;
3729  	}
3730  	rcu_torture_print_module_parms(cur_ops, "Start of test");
3731  	rcutorture_get_gp_data(cur_ops->ttype, &flags, &gp_seq);
3732  	srcutorture_get_gp_data(cur_ops->ttype, srcu_ctlp, &flags, &gp_seq);
3733  	start_gp_seq = gp_seq;
3734  	pr_alert("%s:  Start-test grace-period state: g%ld f%#x\n",
3735  		 cur_ops->name, (long)gp_seq, flags);
3736  
3737  	/* Set up the freelist. */
3738  
3739  	INIT_LIST_HEAD(&rcu_torture_freelist);
3740  	for (i = 0; i < ARRAY_SIZE(rcu_tortures); i++) {
3741  		rcu_tortures[i].rtort_mbtest = 0;
3742  		list_add_tail(&rcu_tortures[i].rtort_free,
3743  			      &rcu_torture_freelist);
3744  	}
3745  
3746  	/* Initialize the statistics so that each run gets its own numbers. */
3747  
3748  	rcu_torture_current = NULL;
3749  	rcu_torture_current_version = 0;
3750  	atomic_set(&n_rcu_torture_alloc, 0);
3751  	atomic_set(&n_rcu_torture_alloc_fail, 0);
3752  	atomic_set(&n_rcu_torture_free, 0);
3753  	atomic_set(&n_rcu_torture_mberror, 0);
3754  	atomic_set(&n_rcu_torture_mbchk_fail, 0);
3755  	atomic_set(&n_rcu_torture_mbchk_tries, 0);
3756  	atomic_set(&n_rcu_torture_error, 0);
3757  	n_rcu_torture_barrier_error = 0;
3758  	n_rcu_torture_boost_ktrerror = 0;
3759  	n_rcu_torture_boost_failure = 0;
3760  	n_rcu_torture_boosts = 0;
3761  	for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++)
3762  		atomic_set(&rcu_torture_wcount[i], 0);
3763  	for_each_possible_cpu(cpu) {
3764  		for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
3765  			per_cpu(rcu_torture_count, cpu)[i] = 0;
3766  			per_cpu(rcu_torture_batch, cpu)[i] = 0;
3767  		}
3768  	}
3769  	err_segs_recorded = 0;
3770  	rt_read_nsegs = 0;
3771  
3772  	/* Start up the kthreads. */
3773  
3774  	rcu_torture_write_types();
3775  	firsterr = torture_create_kthread(rcu_torture_writer, NULL,
3776  					  writer_task);
3777  	if (torture_init_error(firsterr))
3778  		goto unwind;
3779  	if (nfakewriters > 0) {
3780  		fakewriter_tasks = kcalloc(nfakewriters,
3781  					   sizeof(fakewriter_tasks[0]),
3782  					   GFP_KERNEL);
3783  		if (fakewriter_tasks == NULL) {
3784  			TOROUT_ERRSTRING("out of memory");
3785  			firsterr = -ENOMEM;
3786  			goto unwind;
3787  		}
3788  	}
3789  	for (i = 0; i < nfakewriters; i++) {
3790  		firsterr = torture_create_kthread(rcu_torture_fakewriter,
3791  						  NULL, fakewriter_tasks[i]);
3792  		if (torture_init_error(firsterr))
3793  			goto unwind;
3794  	}
3795  	reader_tasks = kcalloc(nrealreaders, sizeof(reader_tasks[0]),
3796  			       GFP_KERNEL);
3797  	rcu_torture_reader_mbchk = kcalloc(nrealreaders, sizeof(*rcu_torture_reader_mbchk),
3798  					   GFP_KERNEL);
3799  	if (!reader_tasks || !rcu_torture_reader_mbchk) {
3800  		TOROUT_ERRSTRING("out of memory");
3801  		firsterr = -ENOMEM;
3802  		goto unwind;
3803  	}
3804  	for (i = 0; i < nrealreaders; i++) {
3805  		rcu_torture_reader_mbchk[i].rtc_chkrdr = -1;
3806  		firsterr = torture_create_kthread(rcu_torture_reader, (void *)i,
3807  						  reader_tasks[i]);
3808  		if (torture_init_error(firsterr))
3809  			goto unwind;
3810  	}
3811  	nrealnocbers = nocbs_nthreads;
3812  	if (WARN_ON(nrealnocbers < 0))
3813  		nrealnocbers = 1;
3814  	if (WARN_ON(nocbs_toggle < 0))
3815  		nocbs_toggle = HZ;
3816  	if (nrealnocbers > 0) {
3817  		nocb_tasks = kcalloc(nrealnocbers, sizeof(nocb_tasks[0]), GFP_KERNEL);
3818  		if (nocb_tasks == NULL) {
3819  			TOROUT_ERRSTRING("out of memory");
3820  			firsterr = -ENOMEM;
3821  			goto unwind;
3822  		}
3823  	} else {
3824  		nocb_tasks = NULL;
3825  	}
3826  	for (i = 0; i < nrealnocbers; i++) {
3827  		firsterr = torture_create_kthread(rcu_nocb_toggle, NULL, nocb_tasks[i]);
3828  		if (torture_init_error(firsterr))
3829  			goto unwind;
3830  	}
3831  	if (stat_interval > 0) {
3832  		firsterr = torture_create_kthread(rcu_torture_stats, NULL,
3833  						  stats_task);
3834  		if (torture_init_error(firsterr))
3835  			goto unwind;
3836  	}
3837  	if (test_no_idle_hz && shuffle_interval > 0) {
3838  		firsterr = torture_shuffle_init(shuffle_interval * HZ);
3839  		if (torture_init_error(firsterr))
3840  			goto unwind;
3841  	}
3842  	if (stutter < 0)
3843  		stutter = 0;
3844  	if (stutter) {
3845  		int t;
3846  
3847  		t = cur_ops->stall_dur ? cur_ops->stall_dur() : stutter * HZ;
3848  		firsterr = torture_stutter_init(stutter * HZ, t);
3849  		if (torture_init_error(firsterr))
3850  			goto unwind;
3851  	}
3852  	if (fqs_duration < 0)
3853  		fqs_duration = 0;
3854  	if (fqs_duration) {
3855  		/* Create the fqs thread */
3856  		firsterr = torture_create_kthread(rcu_torture_fqs, NULL,
3857  						  fqs_task);
3858  		if (torture_init_error(firsterr))
3859  			goto unwind;
3860  	}
3861  	if (test_boost_interval < 1)
3862  		test_boost_interval = 1;
3863  	if (test_boost_duration < 2)
3864  		test_boost_duration = 2;
3865  	if (rcu_torture_can_boost()) {
3866  
3867  		boost_starttime = jiffies + test_boost_interval * HZ;
3868  
3869  		firsterr = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "RCU_TORTURE",
3870  					     rcutorture_booster_init,
3871  					     rcutorture_booster_cleanup);
3872  		rcutor_hp = firsterr;
3873  		if (torture_init_error(firsterr))
3874  			goto unwind;
3875  	}
3876  	shutdown_jiffies = jiffies + shutdown_secs * HZ;
3877  	firsterr = torture_shutdown_init(shutdown_secs, rcu_torture_cleanup);
3878  	if (torture_init_error(firsterr))
3879  		goto unwind;
3880  	firsterr = torture_onoff_init(onoff_holdoff * HZ, onoff_interval,
3881  				      rcutorture_sync);
3882  	if (torture_init_error(firsterr))
3883  		goto unwind;
3884  	firsterr = rcu_torture_stall_init();
3885  	if (torture_init_error(firsterr))
3886  		goto unwind;
3887  	firsterr = rcu_torture_fwd_prog_init();
3888  	if (torture_init_error(firsterr))
3889  		goto unwind;
3890  	firsterr = rcu_torture_barrier_init();
3891  	if (torture_init_error(firsterr))
3892  		goto unwind;
3893  	firsterr = rcu_torture_read_exit_init();
3894  	if (torture_init_error(firsterr))
3895  		goto unwind;
3896  	if (object_debug)
3897  		rcu_test_debug_objects();
3898  	torture_init_end();
3899  	rcu_gp_slow_register(&rcu_fwd_cb_nodelay);
3900  	return 0;
3901  
3902  unwind:
3903  	torture_init_end();
3904  	rcu_torture_cleanup();
3905  	if (shutdown_secs) {
3906  		WARN_ON(!IS_MODULE(CONFIG_RCU_TORTURE_TEST));
3907  		kernel_power_off();
3908  	}
3909  	return firsterr;
3910  }
3911  
3912  module_init(rcu_torture_init);
3913  module_exit(rcu_torture_cleanup);
3914