torture_param(int, extendables, RCUTORTURE_MAX_EXTEND,
"Extend readers by disabling bh (1), irqs (2), or preempt (4)");
-----torture_param(int, fqs_duration, 0,
----- "Duration of fqs bursts (us), 0 to disable");
+++++torture_param(int, fqs_duration, 0, "Duration of fqs bursts (us), 0 to disable");
torture_param(int, fqs_holdoff, 0, "Holdoff time within fqs bursts (us)");
torture_param(int, fqs_stutter, 3, "Wait time between fqs bursts (s)");
-----torture_param(int, fwd_progress, 1, "Test grace-period forward progress");
+++++torture_param(int, fwd_progress, 1, "Number of grace-period forward progress tasks (0 to disable)");
torture_param(int, fwd_progress_div, 4, "Fraction of CPU stall to wait");
-----torture_param(int, fwd_progress_holdoff, 60,
----- "Time between forward-progress tests (s)");
-----torture_param(bool, fwd_progress_need_resched, 1,
----- "Hide cond_resched() behind need_resched()");
+++++torture_param(int, fwd_progress_holdoff, 60, "Time between forward-progress tests (s)");
+++++torture_param(bool, fwd_progress_need_resched, 1, "Hide cond_resched() behind need_resched()");
torture_param(bool, gp_cond, false, "Use conditional/async GP wait primitives");
+++ ++torture_param(bool, gp_cond_exp, false, "Use conditional/async expedited GP wait primitives");
torture_param(bool, gp_exp, false, "Use expedited GP wait primitives");
-----torture_param(bool, gp_normal, false,
----- "Use normal (non-expedited) GP wait primitives");
+++++torture_param(bool, gp_normal, false, "Use normal (non-expedited) GP wait primitives");
torture_param(bool, gp_poll, false, "Use polling GP wait primitives");
+++ ++torture_param(bool, gp_poll_exp, false, "Use polling expedited GP wait primitives");
torture_param(bool, gp_sync, false, "Use synchronous GP wait primitives");
torture_param(int, irqreader, 1, "Allow RCU readers from irq handlers");
torture_param(int, leakpointer, 0, "Leak pointer dereferences from readers");
&rand);
rcu_torture_pipe_update(old_rp);
break;
+++ ++ case RTWS_POLL_GET_EXP:
+++ ++ rcu_torture_writer_state = RTWS_POLL_GET_EXP;
+++ ++ gp_snap = cur_ops->start_gp_poll_exp();
+++ ++ rcu_torture_writer_state = RTWS_POLL_WAIT_EXP;
+++ ++ while (!cur_ops->poll_gp_state_exp(gp_snap))
+++ ++ torture_hrtimeout_jiffies(torture_random(&rand) % 16,
+++ ++ &rand);
+++ ++ rcu_torture_pipe_update(old_rp);
+++ ++ break;
case RTWS_SYNC:
rcu_torture_writer_state = RTWS_SYNC;
+++ ++ if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
+++ ++ cookie = cur_ops->get_gp_state();
+ cur_ops->sync();
+++ + cur_ops->sync();
+++ ++ if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
+++ ++ WARN_ON_ONCE(!cur_ops->poll_gp_state(cookie));
rcu_torture_pipe_update(old_rp);
break;
default: