|
@@ -45,6 +45,7 @@
|
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/export.h>
|
|
|
#include <linux/hardirq.h>
|
|
|
+#include <linux/delay.h>
|
|
|
|
|
|
#define CREATE_TRACE_POINTS
|
|
|
#include <trace/events/rcu.h>
|
|
@@ -81,6 +82,9 @@ void __rcu_read_unlock(void)
|
|
|
} else {
|
|
|
barrier(); /* critical section before exit code. */
|
|
|
t->rcu_read_lock_nesting = INT_MIN;
|
|
|
+#ifdef CONFIG_PROVE_RCU_DELAY
|
|
|
+ udelay(10); /* Make preemption more probable. */
|
|
|
+#endif /* #ifdef CONFIG_PROVE_RCU_DELAY */
|
|
|
barrier(); /* assign before ->rcu_read_unlock_special load */
|
|
|
if (unlikely(ACCESS_ONCE(t->rcu_read_unlock_special)))
|
|
|
rcu_read_unlock_special(t);
|