diff options
Diffstat (limited to 'tools/virtio/asm/barrier.h')
-rw-r--r-- | tools/virtio/asm/barrier.h | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/tools/virtio/asm/barrier.h b/tools/virtio/asm/barrier.h index 26b7926bda88..ba34f9e96efd 100644 --- a/tools/virtio/asm/barrier.h +++ b/tools/virtio/asm/barrier.h | |||
@@ -1,15 +1,19 @@ | |||
1 | #if defined(__i386__) || defined(__x86_64__) | 1 | #if defined(__i386__) || defined(__x86_64__) |
2 | #define barrier() asm volatile("" ::: "memory") | 2 | #define barrier() asm volatile("" ::: "memory") |
3 | #define mb() __sync_synchronize() | 3 | #define virt_mb() __sync_synchronize() |
4 | 4 | #define virt_rmb() barrier() | |
5 | #define smp_mb() mb() | 5 | #define virt_wmb() barrier() |
6 | # define dma_rmb() barrier() | 6 | /* Atomic store should be enough, but gcc generates worse code in that case. */ |
7 | # define dma_wmb() barrier() | 7 | #define virt_store_mb(var, value) do { \ |
8 | # define smp_rmb() barrier() | 8 | typeof(var) virt_store_mb_value = (value); \ |
9 | # define smp_wmb() barrier() | 9 | __atomic_exchange(&(var), &virt_store_mb_value, &virt_store_mb_value, \ |
10 | __ATOMIC_SEQ_CST); \ | ||
11 | barrier(); \ | ||
12 | } while (0); | ||
10 | /* Weak barriers should be used. If not - it's a bug */ | 13 | /* Weak barriers should be used. If not - it's a bug */ |
11 | # define rmb() abort() | 14 | # define mb() abort() |
12 | # define wmb() abort() | 15 | # define rmb() abort() |
16 | # define wmb() abort() | ||
13 | #else | 17 | #else |
14 | #error Please fill in barrier macros | 18 | #error Please fill in barrier macros |
15 | #endif | 19 | #endif |