barrier.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. #elif defined(__nds32__)
  28. #include "../../arch/nds32/include/asm/barrier.h"
  29. #else
  30. #include <asm-generic/barrier.h>
  31. #endif
  32. /*
  33. * Generic fallback smp_*() definitions for archs that haven't
  34. * been updated yet.
  35. */
  36. #ifndef smp_rmb
  37. # define smp_rmb() rmb()
  38. #endif
  39. #ifndef smp_wmb
  40. # define smp_wmb() wmb()
  41. #endif
  42. #ifndef smp_mb
  43. # define smp_mb() mb()
  44. #endif
  45. #ifndef smp_store_release
  46. # define smp_store_release(p, v) \
  47. do { \
  48. smp_mb(); \
  49. WRITE_ONCE(*p, v); \
  50. } while (0)
  51. #endif
  52. #ifndef smp_load_acquire
  53. # define smp_load_acquire(p) \
  54. ({ \
  55. typeof(*p) ___p1 = READ_ONCE(*p); \
  56. smp_mb(); \
  57. ___p1; \
  58. })
  59. #endif