barrier.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */
  8. #ifndef __ASM_BARRIER_H
  9. #define __ASM_BARRIER_H
  10. #ifndef __ASSEMBLY__
  11. /* TODO-vineetg: Need to see what this does, don't we need sync anywhere */
  12. #define mb() __asm__ __volatile__ ("" : : : "memory")
  13. #define rmb() mb()
  14. #define wmb() mb()
  15. #define set_mb(var, value) do { var = value; mb(); } while (0)
  16. #define set_wmb(var, value) do { var = value; wmb(); } while (0)
  17. #define read_barrier_depends() mb()
  18. /* TODO-vineetg verify the correctness of macros here */
  19. #ifdef CONFIG_SMP
  20. #define smp_mb() mb()
  21. #define smp_rmb() rmb()
  22. #define smp_wmb() wmb()
  23. #else
  24. #define smp_mb() barrier()
  25. #define smp_rmb() barrier()
  26. #define smp_wmb() barrier()
  27. #endif
  28. #define smp_mb__before_atomic_dec() barrier()
  29. #define smp_mb__after_atomic_dec() barrier()
  30. #define smp_mb__before_atomic_inc() barrier()
  31. #define smp_mb__after_atomic_inc() barrier()
  32. #define smp_read_barrier_depends() do { } while (0)
  33. #endif
  34. #endif