[rtems commit] score/cpu: Fix _CPU_SMP_lock_Acquire()

Sebastian Huber sebh at rtems.org
Tue Jul 30 15:17:13 UTC 2013


Module:    rtems
Branch:    master
Commit:    9e6df6adf3bc66cd0fe0500e6f153ecb6dc46454
Changeset: http://git.rtems.org/rtems/commit/?id=9e6df6adf3bc66cd0fe0500e6f153ecb6dc46454

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jul 30 15:29:43 2013 +0200

score/cpu: Fix _CPU_SMP_lock_Acquire()

Avoid infinite loops due to compiler optimization.

---

 cpukit/score/cpu/i386/rtems/score/cpusmplock.h  |    2 +-
 cpukit/score/cpu/sparc/rtems/score/cpusmplock.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpukit/score/cpu/i386/rtems/score/cpusmplock.h b/cpukit/score/cpu/i386/rtems/score/cpusmplock.h
index 6fadfef..f9d36e6 100644
--- a/cpukit/score/cpu/i386/rtems/score/cpusmplock.h
+++ b/cpukit/score/cpu/i386/rtems/score/cpusmplock.h
@@ -68,7 +68,7 @@ static inline void _CPU_SMP_lock_Acquire( CPU_SMP_lock_Control *lock )
 {
   do {
     while ( lock->locked ) {
-      /* Do nothing */
+      RTEMS_COMPILER_MEMORY_BARRIER();
     }
   } while ( _I386_Atomic_swap( &lock->locked, 1 ) );
 }
diff --git a/cpukit/score/cpu/sparc/rtems/score/cpusmplock.h b/cpukit/score/cpu/sparc/rtems/score/cpusmplock.h
index 1158040..63b11b4 100644
--- a/cpukit/score/cpu/sparc/rtems/score/cpusmplock.h
+++ b/cpukit/score/cpu/sparc/rtems/score/cpusmplock.h
@@ -73,7 +73,7 @@ static inline void _CPU_SMP_lock_Acquire( CPU_SMP_lock_Control *lock )
 {
   do {
     while ( lock->locked ) {
-      /* Do nothing */
+      RTEMS_COMPILER_MEMORY_BARRIER();
     }
   } while ( _SPARC_Atomic_swap( &lock->locked, 1 ) );
 }




More information about the vc mailing list