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();
+ }
}
/*