]> Pileus Git - ~andy/linux/commitdiff
srcu: API for barrier after srcu read unlock
authorMichael S. Tsirkin <mst@redhat.com>
Mon, 4 Nov 2013 20:36:17 +0000 (22:36 +0200)
committerGleb Natapov <gleb@redhat.com>
Wed, 6 Nov 2013 07:32:09 +0000 (09:32 +0200)
srcu read lock/unlock include a full memory barrier
but that's an implementation detail.
Add an API for make memory fencing explicit for
users that need this barrier, to make sure we
can change it as needed without breaking all users.

Acked-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
include/linux/srcu.h

index c114614ed172fdbb02b70fde61d6838f4734bfb4..9b058eecd40390b914d705809a1aabac3eff132b 100644 (file)
@@ -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