| |
| |
| |
| #ifndef __LIBBPF_LIBBPF_UTIL_H |
| #define __LIBBPF_LIBBPF_UTIL_H |
| |
| #include <stdbool.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| |
| |
| |
| #if defined(__i386__) || defined(__x86_64__) |
| # define libbpf_smp_rmb() asm volatile("" : : : "memory") |
| # define libbpf_smp_wmb() asm volatile("" : : : "memory") |
| # define libbpf_smp_mb() \ |
| <------>asm volatile("lock; addl $0,-4(%%rsp)" : : : "memory", "cc") |
| |
| # define libbpf_smp_rwmb() asm volatile("" : : : "memory") |
| #elif defined(__aarch64__) |
| # define libbpf_smp_rmb() asm volatile("dmb ishld" : : : "memory") |
| # define libbpf_smp_wmb() asm volatile("dmb ishst" : : : "memory") |
| # define libbpf_smp_mb() asm volatile("dmb ish" : : : "memory") |
| # define libbpf_smp_rwmb() libbpf_smp_mb() |
| #elif defined(__arm__) |
| |
| # define libbpf_smp_rmb() asm volatile("dmb ish" : : : "memory") |
| # define libbpf_smp_wmb() asm volatile("dmb ishst" : : : "memory") |
| # define libbpf_smp_mb() asm volatile("dmb ish" : : : "memory") |
| # define libbpf_smp_rwmb() libbpf_smp_mb() |
| #else |
| |
| # define libbpf_smp_rmb() __sync_synchronize() |
| # define libbpf_smp_wmb() __sync_synchronize() |
| # define libbpf_smp_mb() __sync_synchronize() |
| # define libbpf_smp_rwmb() __sync_synchronize() |
| #endif |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |
| |