From cf9eb56580e4ebabff35cfa5484ece3c86f1120c Mon Sep 17 00:00:00 2001
From: Richard Earnshaw <rearnsha@arm.com>
Date: Thu, 3 Dec 2009 14:26:46 +0000
Subject: [PATCH] linux-atomic.c (SYNC_LOCK_RELEASE): Place memory barrier
 before the lock release.

	* arm/linux-atomic.c (SYNC_LOCK_RELEASE): Place memory barrier
	before the lock release.

From-SVN: r154949
---
 gcc/ChangeLog                 | 5 +++++
 gcc/config/arm/linux-atomic.c | 4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0c99c6e24078..258890d1746f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-03  Richard Earnshaw  <rearnsha@arm.com>
+
+	* arm/linux-atomic.c (SYNC_LOCK_RELEASE): Place memory barrier
+	before the lock release.
+
 2009-12-03  Michael Matz  <matz@suse.de>
 
 	PR middle-end/38474
diff --git a/gcc/config/arm/linux-atomic.c b/gcc/config/arm/linux-atomic.c
index 14d4a5380f75..20ad2960f496 100644
--- a/gcc/config/arm/linux-atomic.c
+++ b/gcc/config/arm/linux-atomic.c
@@ -266,8 +266,10 @@ SUBWORD_TEST_AND_SET (char,  1)
   void HIDDEN								\
   __sync_lock_release_##WIDTH (TYPE *ptr)				\
   {									\
-    *ptr = 0;								\
+    /* All writes before this point must be seen before we release	\
+       the lock itself.  */						\
     __kernel_dmb ();							\
+    *ptr = 0;								\
   }
 
 SYNC_LOCK_RELEASE (int,   4)
-- 
GitLab