Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.10-rc1 68 lines 2.3 kB view raw
1#ifndef __ASM_BARRIER_H 2#define __ASM_BARRIER_H 3 4#ifndef __ASSEMBLY__ 5 6#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); 7 8#if __LINUX_ARM_ARCH__ >= 7 || \ 9 (__LINUX_ARM_ARCH__ == 6 && defined(CONFIG_CPU_32v6K)) 10#define sev() __asm__ __volatile__ ("sev" : : : "memory") 11#define wfe() __asm__ __volatile__ ("wfe" : : : "memory") 12#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") 13#endif 14 15#if __LINUX_ARM_ARCH__ >= 7 16#define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory") 17#define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory") 18#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") 19#elif defined(CONFIG_CPU_XSC3) || __LINUX_ARM_ARCH__ == 6 20#define isb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ 21 : : "r" (0) : "memory") 22#define dsb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ 23 : : "r" (0) : "memory") 24#define dmb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \ 25 : : "r" (0) : "memory") 26#elif defined(CONFIG_CPU_FA526) 27#define isb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ 28 : : "r" (0) : "memory") 29#define dsb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ 30 : : "r" (0) : "memory") 31#define dmb(x) __asm__ __volatile__ ("" : : : "memory") 32#else 33#define isb(x) __asm__ __volatile__ ("" : : : "memory") 34#define dsb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ 35 : : "r" (0) : "memory") 36#define dmb(x) __asm__ __volatile__ ("" : : : "memory") 37#endif 38 39#ifdef CONFIG_ARM_HEAVY_MB 40extern void (*soc_mb)(void); 41extern void arm_heavy_mb(void); 42#define __arm_heavy_mb(x...) do { dsb(x); arm_heavy_mb(); } while (0) 43#else 44#define __arm_heavy_mb(x...) dsb(x) 45#endif 46 47#if defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) 48#define mb() __arm_heavy_mb() 49#define rmb() dsb() 50#define wmb() __arm_heavy_mb(st) 51#define dma_rmb() dmb(osh) 52#define dma_wmb() dmb(oshst) 53#else 54#define mb() barrier() 55#define rmb() barrier() 56#define wmb() barrier() 57#define dma_rmb() barrier() 58#define dma_wmb() barrier() 59#endif 60 61#define __smp_mb() dmb(ish) 62#define __smp_rmb() __smp_mb() 63#define __smp_wmb() dmb(ishst) 64 65#include <asm-generic/barrier.h> 66 67#endif /* !__ASSEMBLY__ */ 68#endif /* __ASM_BARRIER_H */