|
@@ -237,4 +237,18 @@ static inline void srcu_read_unlock(struct srcu_struct *sp, int idx)
|
|
|
__srcu_read_unlock(sp, idx);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * smp_mb__after_srcu_read_unlock - ensure full ordering after srcu_read_unlock
|
|
|
+ *
|
|
|
+ * Converts the preceding srcu_read_unlock into a two-way memory barrier.
|
|
|
+ *
|
|
|
+ * Call this after srcu_read_unlock, to guarantee that all memory operations
|
|
|
+ * that occur after smp_mb__after_srcu_read_unlock will appear to happen after
|
|
|
+ * the preceding srcu_read_unlock.
|
|
|
+ */
|
|
|
+static inline void smp_mb__after_srcu_read_unlock(void)
|
|
|
+{
|
|
|
+ /* __srcu_read_unlock has smp_mb() internally so nothing to do here. */
|
|
|
+}
|
|
|
+
|
|
|
#endif
|