Loading tools/virtio/asm/barrier.h +13 −9 Original line number Diff line number Diff line #if defined(__i386__) || defined(__x86_64__) #define barrier() asm volatile("" ::: "memory") #define mb() __sync_synchronize() #define smp_mb() mb() # define dma_rmb() barrier() # define dma_wmb() barrier() # define smp_rmb() barrier() # define smp_wmb() barrier() #define virt_mb() __sync_synchronize() #define virt_rmb() barrier() #define virt_wmb() barrier() /* Atomic store should be enough, but gcc generates worse code in that case. */ #define virt_store_mb(var, value) do { \ typeof(var) virt_store_mb_value = (value); \ __atomic_exchange(&(var), &virt_store_mb_value, &virt_store_mb_value, \ __ATOMIC_SEQ_CST); \ barrier(); \ } while (0); /* Weak barriers should be used. If not - it's a bug */ # define mb() abort() # define rmb() abort() # define wmb() abort() #else Loading tools/virtio/linux/compiler.h 0 → 100644 +9 −0 Original line number Diff line number Diff line #ifndef LINUX_COMPILER_H #define LINUX_COMPILER_H #define WRITE_ONCE(var, val) \ (*((volatile typeof(val) *)(&(var))) = (val)) #define READ_ONCE(var) (*((volatile typeof(val) *)(&(var)))) #endif tools/virtio/linux/kernel.h +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <assert.h> #include <stdarg.h> #include <linux/compiler.h> #include <linux/types.h> #include <linux/printk.h> #include <linux/bug.h> Loading Loading
tools/virtio/asm/barrier.h +13 −9 Original line number Diff line number Diff line #if defined(__i386__) || defined(__x86_64__) #define barrier() asm volatile("" ::: "memory") #define mb() __sync_synchronize() #define smp_mb() mb() # define dma_rmb() barrier() # define dma_wmb() barrier() # define smp_rmb() barrier() # define smp_wmb() barrier() #define virt_mb() __sync_synchronize() #define virt_rmb() barrier() #define virt_wmb() barrier() /* Atomic store should be enough, but gcc generates worse code in that case. */ #define virt_store_mb(var, value) do { \ typeof(var) virt_store_mb_value = (value); \ __atomic_exchange(&(var), &virt_store_mb_value, &virt_store_mb_value, \ __ATOMIC_SEQ_CST); \ barrier(); \ } while (0); /* Weak barriers should be used. If not - it's a bug */ # define mb() abort() # define rmb() abort() # define wmb() abort() #else Loading
tools/virtio/linux/compiler.h 0 → 100644 +9 −0 Original line number Diff line number Diff line #ifndef LINUX_COMPILER_H #define LINUX_COMPILER_H #define WRITE_ONCE(var, val) \ (*((volatile typeof(val) *)(&(var))) = (val)) #define READ_ONCE(var) (*((volatile typeof(val) *)(&(var)))) #endif
tools/virtio/linux/kernel.h +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <assert.h> #include <stdarg.h> #include <linux/compiler.h> #include <linux/types.h> #include <linux/printk.h> #include <linux/bug.h> Loading