X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Furcu%2Farch%2Farm.h;h=5d1c60836da9a34fb1f2f71783255f5532d546b3;hb=3f0dd283a89ab114ffbf5c3dd46463217c6bb2ff;hp=5cbca7d7f1d0d523186b40837ce93ff515615128;hpb=6893800a4d1cc14dff0395ddcd660a5138db183d;p=urcu.git diff --git a/include/urcu/arch/arm.h b/include/urcu/arch/arm.h index 5cbca7d..5d1c608 100644 --- a/include/urcu/arch/arm.h +++ b/include/urcu/arch/arm.h @@ -31,9 +31,19 @@ extern "C" { #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 @@ -47,6 +57,19 @@ extern "C" { #define __NR_membarrier 389 #endif +/* + * Error out for compilers with known bugs. + */ + +/* + * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 + */ +#ifdef URCU_GCC_VERSION +# if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40802 +# error Your gcc version produces clobbered frame accesses +# endif +#endif + #ifdef __cplusplus } #endif