barrier.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <linux/compiler.h>
  3. #if defined(__i386__) || defined(__x86_64__)
  4. #include "../../arch/x86/include/asm/barrier.h"
  5. #elif defined(__arm__)
  6. #include "../../arch/arm/include/asm/barrier.h"
  7. #elif defined(__aarch64__)
  8. #include "../../arch/arm64/include/asm/barrier.h"
  9. #elif defined(__powerpc__)
  10. #include "../../arch/powerpc/include/asm/barrier.h"
  11. #elif defined(__s390__)
  12. #include "../../arch/s390/include/asm/barrier.h"
  13. #elif defined(__sh__)
  14. #include "../../arch/sh/include/asm/barrier.h"
  15. #elif defined(__sparc__)
  16. #include "../../arch/sparc/include/asm/barrier.h"
  17. #elif defined(__tile__)
  18. #include "../../arch/tile/include/asm/barrier.h"
  19. #elif defined(__alpha__)
  20. #include "../../arch/alpha/include/asm/barrier.h"
  21. #elif defined(__mips__)
  22. #include "../../arch/mips/include/asm/barrier.h"
  23. #elif defined(__ia64__)
  24. #include "../../arch/ia64/include/asm/barrier.h"
  25. #elif defined(__xtensa__)
  26. #include "../../arch/xtensa/include/asm/barrier.h"
  27. #else
  28. #include <asm-generic/barrier.h>
  29. #endif
  30. /*
  31. * Generic fallback smp_*() definitions for archs that haven't
  32. * been updated yet.
  33. */
  34. #ifndef smp_rmb
  35. # define smp_rmb() rmb()
  36. #endif
  37. #ifndef smp_wmb
  38. # define smp_wmb() wmb()
  39. #endif
  40. #ifndef smp_mb
  41. # define smp_mb() mb()
  42. #endif
  43. #ifndef smp_store_release
  44. # define smp_store_release(p, v) \
  45. do { \
  46. smp_mb(); \
  47. WRITE_ONCE(*p, v); \
  48. } while (0)
  49. #endif
  50. #ifndef smp_load_acquire
  51. # define smp_load_acquire(p) \
  52. ({ \
  53. typeof(*p) ___p1 = READ_ONCE(*p); \
  54. smp_mb(); \
  55. ___p1; \
  56. })
  57. #endif