summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2f10494)
Based on https://gcc.gnu.org/ml/gcc-patches/2014-11/msg01272.html:
From: Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>:
"Hans Boehm pointed out that we were using dmb sy instead of dmb ish.
Given that the ARM-ARM says that the inner shareability domain is really
the one that contains all PE's controlled by a single hypervisor or
operating system, it would be safe to replace all dmb sy's with dmb
ish's. "
Keep full system barriers for cmm_mb()/cmm_rmb()/cmm_wmb().
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
#endif
#ifdef CONFIG_RCU_ARM_HAVE_DMB
#endif
#ifdef CONFIG_RCU_ARM_HAVE_DMB
-#define cmm_mb() __asm__ __volatile__ ("dmb":::"memory")
-#define cmm_rmb() __asm__ __volatile__ ("dmb":::"memory")
-#define cmm_wmb() __asm__ __volatile__ ("dmb":::"memory")
+/*
+ * Issues full system DMB operation.
+ */
+#define cmm_mb() __asm__ __volatile__ ("dmb sy":::"memory")
+#define cmm_rmb() __asm__ __volatile__ ("dmb sy":::"memory")
+#define cmm_wmb() __asm__ __volatile__ ("dmb sy":::"memory")
+
+/*
+ * Issues DMB operation only to the inner shareable domain.
+ */
+#define cmm_smp_mb() __asm__ __volatile__ ("dmb ish":::"memory")
+#define cmm_smp_rmb() __asm__ __volatile__ ("dmb ish":::"memory")
+#define cmm_smp_wmb() __asm__ __volatile__ ("dmb ish":::"memory")
#endif /* CONFIG_RCU_ARM_HAVE_DMB */
#include <stdlib.h>
#endif /* CONFIG_RCU_ARM_HAVE_DMB */
#include <stdlib.h>