barrier.h 751 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef __BARRIER_H
  2. #define __BARRIER_H
  3. #include <asm/compiler.h>
  4. #define mb() \
  5. __asm__ __volatile__("mb": : :"memory")
  6. #define rmb() \
  7. __asm__ __volatile__("mb": : :"memory")
  8. #define wmb() \
  9. __asm__ __volatile__("wmb": : :"memory")
  10. #define read_barrier_depends() \
  11. __asm__ __volatile__("mb": : :"memory")
  12. #ifdef CONFIG_SMP
  13. #define __ASM_SMP_MB "\tmb\n"
  14. #define smp_mb() mb()
  15. #define smp_rmb() rmb()
  16. #define smp_wmb() wmb()
  17. #define smp_read_barrier_depends() read_barrier_depends()
  18. #else
  19. #define __ASM_SMP_MB
  20. #define smp_mb() barrier()
  21. #define smp_rmb() barrier()
  22. #define smp_wmb() barrier()
  23. #define smp_read_barrier_depends() do { } while (0)
  24. #endif
  25. #define set_mb(var, value) \
  26. do { var = value; mb(); } while (0)
  27. #endif /* __BARRIER_H */