ARM: Break apart ARMv5 and older dsb/dmb
* Add isb just because. * pdziepak pointed out that ARMv5 and before had different barrier support. * pdziepak also mentioned that dsb was too strong for __sync_synchronize
This commit is contained in:
@@ -9,12 +9,20 @@
|
||||
#define _KERNEL_ARCH_ARM_ATOMIC_H
|
||||
|
||||
|
||||
#if __ARM_ARCH__ <= 6
|
||||
#if __ARM_ARCH__ <= 5
|
||||
#define isb() __asm__ __volatile__("" : : : "memory")
|
||||
#define dsb() __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#define dmb() __asm__ __volatile__("" : : : "memory")
|
||||
#elif __ARM_ARCH__ == 6
|
||||
#define isb() __asm__ __volatile__("mcr p15, 0, %0, c7, c5, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#define dsb() __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#define dmb() __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#else
|
||||
#else /* ARMv7+ */
|
||||
#define isb() __asm__ __volatile__("isb" : : : "memory")
|
||||
#define dsb() __asm__ __volatile__("dsb" : : : "memory")
|
||||
#define dmb() __asm__ __volatile__("dmb" : : : "memory")
|
||||
#endif
|
||||
|
||||
@@ -27,5 +27,5 @@ find_thread(const char *name)
|
||||
void
|
||||
__sync_synchronize(void)
|
||||
{
|
||||
dsb();
|
||||
dmb();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user