From 5cef6be21fffd3b075d80c225e4e78689a9be95b Mon Sep 17 00:00:00 2001 From: "Ithamar R. Adema" Date: Sat, 15 Feb 2014 11:17:54 +0100 Subject: [PATCH] arm/atomic: fixup arch_atomic.h * Remove _inline functions, since we're not using inlines * Use compiler barrier instead of GCC builtin --- headers/private/kernel/arch/arm/arch_atomic.h | 75 ++----------------- 1 file changed, 5 insertions(+), 70 deletions(-) diff --git a/headers/private/kernel/arch/arm/arch_atomic.h b/headers/private/kernel/arch/arm/arch_atomic.h index d893bbcfe4..db12cadd5d 100644 --- a/headers/private/kernel/arch/arm/arch_atomic.h +++ b/headers/private/kernel/arch/arm/arch_atomic.h @@ -12,91 +12,26 @@ static inline void memory_read_barrier_inline(void) { - __sync_synchronize(); + asm volatile ("":::"memory"); } static inline void memory_write_barrier_inline(void) { - __sync_synchronize(); + asm volatile ("":::"memory"); } static inline void memory_full_barrier_inline(void) { - __sync_synchronize(); + asm volatile ("":::"memory"); } -#define memory_read_barrier memory_read_barrier_inline +#define memory_read_barrier memory_read_barrier_inline #define memory_write_barrier memory_write_barrier_inline -#define memory_full_barrier memory_full_barrier_inline - - -static inline void -atomic_set_inline(int32* value, int32 newValue) -{ - memory_write_barrier(); - *(volatile int32*)value = newValue; -} - - -static inline int32 -atomic_get_and_set_inline(int32* value, int32 newValue) -{ - // BIG TODO: ARM Atomic get and set -// asm volatile("xchgl %0, (%1)" -// : "+r" (newValue) -// : "r" (value) -// : "memory"); - return newValue; -} - - -static inline int32 -atomic_test_and_set_inline(int32* value, int32 newValue, int32 testAgainst) -{ - // BIG TODO: ARM Atomic test and set inline -// asm volatile("lock; cmpxchgl %2, (%3)" -// : "=a" (newValue) -// : "0" (testAgainst), "r" (newValue), "r" (value) -// : "memory"); - return newValue; -} - - -static inline int32 -atomic_add_inline(int32* value, int32 newValue) -{ - // BIG TODO: ARM Atomic add inline -// asm volatile("lock; xaddl %0, (%1)" -// : "+r" (newValue) -// : "r" (value) -// : "memory"); - return newValue; -} - - -static inline int32 -atomic_get_inline(int32* value) -{ - int32 newValue = *(volatile int32*)value; - memory_read_barrier(); - return newValue; -} - - -#define atomic_set atomic_set_inline -#define atomic_get_and_set atomic_get_and_set_inline -#ifndef atomic_test_and_set -# define atomic_test_and_set atomic_test_and_set_inline -#endif -#ifndef atomic_add -# define atomic_add atomic_add_inline -#endif -#define atomic_get atomic_get_inline - +#define memory_full_barrier memory_full_barrier_inline #endif // _KERNEL_ARCH_ARM_ATOMIC_H