diff options
| -rw-r--r-- | arch/arm/include/asm/system.h | 16 | ||||
| -rw-r--r-- | arch/arm/mm/Kconfig | 6 |
2 files changed, 16 insertions, 6 deletions
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index ca88e6a84707..4ace45ec3ef8 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
| @@ -60,6 +60,8 @@ | |||
| 60 | #include <linux/linkage.h> | 60 | #include <linux/linkage.h> |
| 61 | #include <linux/irqflags.h> | 61 | #include <linux/irqflags.h> |
| 62 | 62 | ||
| 63 | #include <asm/outercache.h> | ||
| 64 | |||
| 63 | #define __exception __attribute__((section(".exception.text"))) | 65 | #define __exception __attribute__((section(".exception.text"))) |
| 64 | 66 | ||
| 65 | struct thread_info; | 67 | struct thread_info; |
| @@ -137,10 +139,12 @@ extern unsigned int user_debug; | |||
| 137 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | 139 | #define dmb() __asm__ __volatile__ ("" : : : "memory") |
| 138 | #endif | 140 | #endif |
| 139 | 141 | ||
| 140 | #if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) | 142 | #ifdef CONFIG_ARCH_HAS_BARRIERS |
| 141 | #define mb() dmb() | 143 | #include <mach/barriers.h> |
| 144 | #elif __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) | ||
| 145 | #define mb() do { dsb(); outer_sync(); } while (0) | ||
| 142 | #define rmb() dmb() | 146 | #define rmb() dmb() |
| 143 | #define wmb() dmb() | 147 | #define wmb() mb() |
| 144 | #else | 148 | #else |
| 145 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 149 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
| 146 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 150 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
| @@ -152,9 +156,9 @@ extern unsigned int user_debug; | |||
| 152 | #define smp_rmb() barrier() | 156 | #define smp_rmb() barrier() |
| 153 | #define smp_wmb() barrier() | 157 | #define smp_wmb() barrier() |
| 154 | #else | 158 | #else |
| 155 | #define smp_mb() mb() | 159 | #define smp_mb() dmb() |
| 156 | #define smp_rmb() rmb() | 160 | #define smp_rmb() dmb() |
| 157 | #define smp_wmb() wmb() | 161 | #define smp_wmb() dmb() |
| 158 | #endif | 162 | #endif |
| 159 | 163 | ||
| 160 | #define read_barrier_depends() do { } while(0) | 164 | #define read_barrier_depends() do { } while(0) |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 55a2a00db77f..5bd7c89a6045 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -788,3 +788,9 @@ config ARM_L1_CACHE_SHIFT | |||
| 788 | int | 788 | int |
| 789 | default 6 if ARM_L1_CACHE_SHIFT_6 | 789 | default 6 if ARM_L1_CACHE_SHIFT_6 |
| 790 | default 5 | 790 | default 5 |
| 791 | |||
| 792 | config ARCH_HAS_BARRIERS | ||
| 793 | bool | ||
| 794 | help | ||
| 795 | This option allows the use of custom mandatory barriers | ||
| 796 | included via the mach/barriers.h file. | ||
