diff options
Diffstat (limited to 'arch/arm/include/asm/system.h')
| -rw-r--r-- | arch/arm/include/asm/system.h | 16 | 
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index ca88e6a8470..4ace45ec3ef 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -60,6 +60,8 @@  #include <linux/linkage.h>  #include <linux/irqflags.h> +#include <asm/outercache.h> +  #define __exception	__attribute__((section(".exception.text")))  struct thread_info; @@ -137,10 +139,12 @@ extern unsigned int user_debug;  #define dmb() __asm__ __volatile__ ("" : : : "memory")  #endif -#if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) -#define mb()		dmb() +#ifdef CONFIG_ARCH_HAS_BARRIERS +#include <mach/barriers.h> +#elif __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) +#define mb()		do { dsb(); outer_sync(); } while (0)  #define rmb()		dmb() -#define wmb()		dmb() +#define wmb()		mb()  #else  #define mb()	do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)  #define rmb()	do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) @@ -152,9 +156,9 @@ extern unsigned int user_debug;  #define smp_rmb()	barrier()  #define smp_wmb()	barrier()  #else -#define smp_mb()	mb() -#define smp_rmb()	rmb() -#define smp_wmb()	wmb() +#define smp_mb()	dmb() +#define smp_rmb()	dmb() +#define smp_wmb()	dmb()  #endif  #define read_barrier_depends()		do { } while(0)  |