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: