From 9b2f2262b4e78925fa505e96f59220e2023cedea Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 20 May 2021 15:02:23 +0200 Subject: [PATCH] vhost: use bvec_kmap_local in {get,put}u16_iotlb Using local kmaps slightly reduces the chances to stray writes, and the bvec interface cleans up the code a little bit. Signed-off-by: Christoph Hellwig --- drivers/vhost/vringh.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c index 4af8fa259d65..cd529fbf83f6 100644 --- a/drivers/vhost/vringh.c +++ b/drivers/vhost/vringh.c @@ -1173,7 +1173,7 @@ static inline int getu16_iotlb(const struct vringh *vrh, u16 *val, const __virtio16 *p) { struct bio_vec iov; - void *kaddr, *from; + void *kaddr; int ret; /* Atomic read is needed for getu16 */ @@ -1182,10 +1182,9 @@ static inline int getu16_iotlb(const struct vringh *vrh, if (ret < 0) return ret; - kaddr = kmap_atomic(iov.bv_page); - from = kaddr + iov.bv_offset; - *val = vringh16_to_cpu(vrh, READ_ONCE(*(__virtio16 *)from)); - kunmap_atomic(kaddr); + kaddr = bvec_kmap_local(&iov); + *val = vringh16_to_cpu(vrh, READ_ONCE(*(__virtio16 *)kaddr)); + kunmap_local(kaddr); return 0; } @@ -1194,7 +1193,7 @@ static inline int putu16_iotlb(const struct vringh *vrh, __virtio16 *p, u16 val) { struct bio_vec iov; - void *kaddr, *to; + void *kaddr; int ret; /* Atomic write is needed for putu16 */ @@ -1203,10 +1202,9 @@ static inline int putu16_iotlb(const struct vringh *vrh, if (ret < 0) return ret; - kaddr = kmap_atomic(iov.bv_page); - to = kaddr + iov.bv_offset; - WRITE_ONCE(*(__virtio16 *)to, cpu_to_vringh16(vrh, val)); - kunmap_atomic(kaddr); + kaddr = bvec_kmap_local(&iov); + WRITE_ONCE(*(__virtio16 *)kaddr, cpu_to_vringh16(vrh, val)); + kunmap_loal(kaddr); return 0; } -- 2.50.1