mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ |
|
/* Copyright (c) 2019 Facebook */ |
|
|
|
#ifndef __LIBBPF_LIBBPF_UTIL_H |
|
#define __LIBBPF_LIBBPF_UTIL_H |
|
|
|
#include <stdbool.h> |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/* Use these barrier functions instead of smp_[rw]mb() when they are |
|
* used in a libbpf header file. That way they can be built into the |
|
* application that uses libbpf. |
|
*/ |
|
#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") |
|
/* Hinders stores to be observed before older loads. */ |
|
# 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__) |
|
/* These are only valid for armv7 and above */ |
|
# 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 |
|
/* Architecture missing native barrier functions. */ |
|
# 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 |
|
} /* extern "C" */ |
|
#endif |
|
|
|
#endif
|
|
|