This wake_up() will be accompanied by a
                        WARN_ONCE() splat and an ftrace_dump().
 
+       rcutree.rcu_unlock_delay= [KNL]
+                       In CONFIG_RCU_STRICT_GRACE_PERIOD=y kernels,
+                       this specifies an rcu_read_unlock()-time delay
+                       in microseconds.  This defaults to zero.
+                       Larger delays increase the probability of
+                       catching RCU pointer leaks, that is, buggy use
+                       of RCU-protected pointers after the relevant
+                       rcu_read_unlock() has completed.
+
        rcutree.sysrq_rcu= [KNL]
                        Commandeer a sysrq key to dump out Tree RCU's
                        rcu_node tree with an eye towards determining
 
        return !list_empty(&rnp->blkd_tasks);
 }
 
+// Add delay to rcu_read_unlock() for strict grace periods.
+static int rcu_unlock_delay;
+#ifdef CONFIG_RCU_STRICT_GRACE_PERIOD
+module_param(rcu_unlock_delay, int, 0444);
+#endif
+
 /*
  * Report deferred quiescent states.  The deferral time can
  * be quite short, for example, in the case of the call from
        }
        t->rcu_read_unlock_special.s = 0;
        if (special.b.need_qs) {
-               if (IS_ENABLED(CONFIG_RCU_STRICT_GRACE_PERIOD))
+               if (IS_ENABLED(CONFIG_RCU_STRICT_GRACE_PERIOD)) {
                        rcu_report_qs_rdp(rdp->cpu, rdp);
-               else
+                       udelay(rcu_unlock_delay);
+               } else {
                        rcu_qs();
+               }
        }
 
        /*