From b65302231c5e810e085b3d2939772de702edb0fd Mon Sep 17 00:00:00 2001 From: Catalin Marinas Date: Wed, 24 Mar 2010 16:49:54 +0100 Subject: [PATCH] --- yaml --- r: 189407 b: refs/heads/master c: e7c5650f6067f65f8e961394f376d4862808d0d2 h: refs/heads/master i: 189405: 642633b06d62d22ca68c7700bbff68f4c84246c0 189403: b8e41687025d8799b167b481100ae4cb9c40bcb1 189399: fb20f8aabb761534e45750d9ad1048e4f86e692c 189391: 7867cd30c2ec638d4126a3cde1610377f90cac5b 189375: cff8ca6aa692ab707eca98e8f1b5b764aea30865 v: v3 --- [refs] | 2 +- trunk/arch/arm/include/asm/system.h | 16 ++++++++++------ trunk/arch/arm/mm/Kconfig | 6 ++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 402eb1e468d3..1a5edd5e68af 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 23107c542068b2b94390aa333f6b330af64961e4 +refs/heads/master: e7c5650f6067f65f8e961394f376d4862808d0d2 diff --git a/trunk/arch/arm/include/asm/system.h b/trunk/arch/arm/include/asm/system.h index ca88e6a84707..4ace45ec3ef8 100644 --- a/trunk/arch/arm/include/asm/system.h +++ b/trunk/arch/arm/include/asm/system.h @@ -60,6 +60,8 @@ #include #include +#include + #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 +#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) diff --git a/trunk/arch/arm/mm/Kconfig b/trunk/arch/arm/mm/Kconfig index 55a2a00db77f..5bd7c89a6045 100644 --- a/trunk/arch/arm/mm/Kconfig +++ b/trunk/arch/arm/mm/Kconfig @@ -788,3 +788,9 @@ config ARM_L1_CACHE_SHIFT int default 6 if ARM_L1_CACHE_SHIFT_6 default 5 + +config ARCH_HAS_BARRIERS + bool + help + This option allows the use of custom mandatory barriers + included via the mach/barriers.h file.