From cf9eb56580e4ebabff35cfa5484ece3c86f1120c Mon Sep 17 00:00:00 2001 From: Richard Earnshaw 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 0c99c6e2407..258890d1746 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-12-03 Richard Earnshaw + + * arm/linux-atomic.c (SYNC_LOCK_RELEASE): Place memory barrier + before the lock release. + 2009-12-03 Michael Matz PR middle-end/38474 diff --git a/gcc/config/arm/linux-atomic.c b/gcc/config/arm/linux-atomic.c index 14d4a5380f7..20ad2960f49 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)