[Libreoffice-commits] .: sal/osl

Bjoern Michaelsen bmichaelsen at kemper.freedesktop.org
Wed Mar 9 01:11:56 PST 2011


 sal/osl/unx/interlck.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

New commits:
commit 75f9926ecd485c349b5c66b8881aa5137aacde26
Author: Jani Monoses <jani.monoses at canonical.com>
Date:   Wed Mar 9 10:06:16 2011 +0100

    lp#726529: using the Linaro gcc 4.5 generated code instead
    
     * this adds memory barriers to the asm code block making it SMP-safe

diff --git a/sal/osl/unx/interlck.c b/sal/osl/unx/interlck.c
index 7cf09b9..826592a 100644
--- a/sal/osl/unx/interlck.c
+++ b/sal/osl/unx/interlck.c
@@ -40,6 +40,8 @@
 #elif defined ( ARM ) && (( __GNUC__ < 4 ) || (( __GNUC__ == 4) && ( __GNUC_MINOR__ < 6 ))) && ( __ARM_ARCH__ >= 6)
 // assembler implementation for gcc <4.6 on arm
 // originally contributed by Eric Bachard / OOo4Kids
+// replaced with the asm code generated by Linaro gcc 4.5
+// which includes memory barriers to make it SMP-safe
 // #i117017# and lp#726529
 oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount)
 {
@@ -47,11 +49,13 @@ oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount*
     int nResult;
 
     __asm__ __volatile__ (
+"     dmb\n"
 "1:   ldrex %0, [%3]\n"
 "     add %0, %0, #1\n"
 "     strex %1, %0, [%3]\n"
 "     teq %1, #0\n"
-"     bne 1b"
+"     bne 1b\n"
+"     dmb\n"
         : "=&r" (nCount), "=&r" (nResult), "=m" (*pCount)
         : "r" (pCount)
         : "memory");
@@ -65,11 +69,13 @@ oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount*
     int nResult;
 
     __asm__ __volatile__ (
+"     dmb\n"
 "0:   ldrex %0, [%3]\n"
 "     sub %0, %0, #1\n"
 "     strex %1, %0, [%3]\n"
 "     teq %1, #0\n"
-"     bne 0b"
+"     bne 0b\n"
+"     dmb\n"
         : "=&r" (nCount), "=&r" (nResult), "=m" (*pCount)
         : "r" (pCount)
         : "memory");


More information about the Libreoffice-commits mailing list