[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH RFCv2 25/27] plat/virtio: Use better iormb/iowmb on arm64
This replace better mb with the old rmb/wmb Signed-off-by: Jia He <justin.he@xxxxxxx> --- plat/drivers/include/virtio/virtio_config.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/plat/drivers/include/virtio/virtio_config.h b/plat/drivers/include/virtio/virtio_config.h index b80f26a..84421b4 100644 --- a/plat/drivers/include/virtio/virtio_config.h +++ b/plat/drivers/include/virtio/virtio_config.h @@ -115,8 +115,18 @@ static inline void _virtio_cread_bytes(const void *addr, const __u8 offset, #else /* __X86_64__ */ /* IO barriers */ -#define __iormb() rmb() -#define __iowmb() wmb() +#define __iormb(v) \ +({ \ + unsigned long tmp; \ + dmb(oshld); \ + \ + asm volatile("eor %0, %1, %1\n" \ + "cbnz %0, ." \ + : "=r" (tmp) : "r" ((unsigned long)(v)) \ + : "memory"); \ +}) + +#define __iowmb() dmb(oshst) static inline void _virtio_cwrite_bytes(const void *addr, const __u8 offset, const void *buf, int len, int type_len) @@ -168,7 +178,7 @@ static inline void _virtio_cread_bytes(const void *addr, const __u8 offset, default: UK_CRASH("Unsupported virtio read operation\n"); } - __iormb(); + __iormb(io_addr); } } -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |