diff options
author | ngie <ngie@FreeBSD.org> | 2015-10-05 00:11:49 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2015-10-05 00:11:49 +0000 |
commit | e3bac3a30a41f56ac36f4791a7df260f2155c8db (patch) | |
tree | ac20948d4aa368300bc16ece67336a1bed25e992 /sys/arm/include | |
parent | ca6cf0ba737487849f2ee102afce74545600850c (diff) | |
parent | 85fa330dc74592563cea8d7cf0e628fd30683993 (diff) | |
download | FreeBSD-src-e3bac3a30a41f56ac36f4791a7df260f2155c8db.zip FreeBSD-src-e3bac3a30a41f56ac36f4791a7df260f2155c8db.tar.gz |
MFhead @ r281414
Diffstat (limited to 'sys/arm/include')
-rw-r--r-- | sys/arm/include/asm.h | 2 | ||||
-rw-r--r-- | sys/arm/include/atomic-v4.h | 33 | ||||
-rw-r--r-- | sys/arm/include/atomic-v6.h | 28 | ||||
-rw-r--r-- | sys/arm/include/atomic.h | 28 |
4 files changed, 63 insertions, 28 deletions
diff --git a/sys/arm/include/asm.h b/sys/arm/include/asm.h index 2f64c37..5958ea3 100644 --- a/sys/arm/include/asm.h +++ b/sys/arm/include/asm.h @@ -53,10 +53,12 @@ #define STOP_UNWINDING .cantunwind #define _FNSTART .fnstart #define _FNEND .fnend +#define _SAVE(...) .save __VA_ARGS__ #else #define STOP_UNWINDING #define _FNSTART #define _FNEND +#define _SAVE(...) #endif /* diff --git a/sys/arm/include/atomic-v4.h b/sys/arm/include/atomic-v4.h index 7048178..2854655 100644 --- a/sys/arm/include/atomic-v4.h +++ b/sys/arm/include/atomic-v4.h @@ -439,4 +439,37 @@ atomic_subtract_long(volatile u_long *p, u_long v) atomic_subtract_32((volatile uint32_t *)p, v); } +/* + * ARMv5 does not support SMP. For both kernel and user modes, only a + * compiler barrier is needed for fences, since CPU is always + * self-consistent. + */ +static __inline void +atomic_thread_fence_acq(void) +{ + + __compiler_membar(); +} + +static __inline void +atomic_thread_fence_rel(void) +{ + + __compiler_membar(); +} + +static __inline void +atomic_thread_fence_acq_rel(void) +{ + + __compiler_membar(); +} + +static __inline void +atomic_thread_fence_seq_cst(void) +{ + + __compiler_membar(); +} + #endif /* _MACHINE_ATOMIC_H_ */ diff --git a/sys/arm/include/atomic-v6.h b/sys/arm/include/atomic-v6.h index 06d8880..d22f7e1 100644 --- a/sys/arm/include/atomic-v6.h +++ b/sys/arm/include/atomic-v6.h @@ -596,4 +596,32 @@ atomic_store_rel_long(volatile u_long *p, u_long v) #undef ATOMIC_ACQ_REL #undef ATOMIC_ACQ_REL_LONG +static __inline void +atomic_thread_fence_acq(void) +{ + + dmb(); +} + +static __inline void +atomic_thread_fence_rel(void) +{ + + dmb(); +} + +static __inline void +atomic_thread_fence_acq_rel(void) +{ + + dmb(); +} + +static __inline void +atomic_thread_fence_seq_cst(void) +{ + + dmb(); +} + #endif /* _MACHINE_ATOMIC_V6_H_ */ diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h index 5379030..039af34 100644 --- a/sys/arm/include/atomic.h +++ b/sys/arm/include/atomic.h @@ -82,34 +82,6 @@ atomic_store_long(volatile u_long *dst, u_long src) *dst = src; } -static __inline void -atomic_thread_fence_acq(void) -{ - - dmb(); -} - -static __inline void -atomic_thread_fence_rel(void) -{ - - dmb(); -} - -static __inline void -atomic_thread_fence_acq_rel(void) -{ - - dmb(); -} - -static __inline void -atomic_thread_fence_seq_cst(void) -{ - - dmb(); -} - #define atomic_clear_ptr atomic_clear_32 #define atomic_set_ptr atomic_set_32 #define atomic_cmpset_ptr atomic_cmpset_32 |