|
@@ -60,6 +60,8 @@
|
|
#include <linux/linkage.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/irqflags.h>
|
|
#include <linux/irqflags.h>
|
|
|
|
|
|
|
|
+#include <asm/outercache.h>
|
|
|
|
+
|
|
#define __exception __attribute__((section(".exception.text")))
|
|
#define __exception __attribute__((section(".exception.text")))
|
|
|
|
|
|
struct thread_info;
|
|
struct thread_info;
|
|
@@ -137,10 +139,12 @@ extern unsigned int user_debug;
|
|
#define dmb() __asm__ __volatile__ ("" : : : "memory")
|
|
#define dmb() __asm__ __volatile__ ("" : : : "memory")
|
|
#endif
|
|
#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 rmb() dmb()
|
|
-#define wmb() dmb()
|
|
|
|
|
|
+#define wmb() mb()
|
|
#else
|
|
#else
|
|
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
|
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
|
#define rmb() 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_rmb() barrier()
|
|
#define smp_wmb() barrier()
|
|
#define smp_wmb() barrier()
|
|
#else
|
|
#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
|
|
#endif
|
|
|
|
|
|
#define read_barrier_depends() do { } while(0)
|
|
#define read_barrier_depends() do { } while(0)
|