Message ID | 20210621144522.1304273-1-hca@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio/s390: get rid of open-coded kvm hypercall | expand |
On Mon, Jun 21 2021, Heiko Carstens <hca@linux.ibm.com> wrote: > do_kvm_notify() and __do_kvm_notify() are an (exact) open-coded variant > of kvm_hypercall3(). Therefore simply make use of kvm_hypercall3(), > and get rid of duplicated code. > > Signed-off-by: Heiko Carstens <hca@linux.ibm.com> > --- > drivers/s390/virtio/virtio_ccw.c | 30 ++++-------------------------- > 1 file changed, 4 insertions(+), 26 deletions(-) > Hm, I wonder why I didn't use kvm_hypercall3 in the first place. It's in a header, and therefore should be independent of kvm being configured. I don't think there's anything else virtio-ccw in flight at the moment, so maybe you can apply this one directly? Reviewed-by: Cornelia Huck <cohuck@redhat.com>
On 21.06.21 16:45, Heiko Carstens wrote: > do_kvm_notify() and __do_kvm_notify() are an (exact) open-coded variant > of kvm_hypercall3(). Therefore simply make use of kvm_hypercall3(), > and get rid of duplicated code. > > Signed-off-by: Heiko Carstens <hca@linux.ibm.com> > --- > drivers/s390/virtio/virtio_ccw.c | 30 ++++-------------------------- > 1 file changed, 4 insertions(+), 26 deletions(-) Certainly a nice improvement in terms of LOCs. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> > diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c > index 54e686dca6de..d35e7a3f7067 100644 > --- a/drivers/s390/virtio/virtio_ccw.c > +++ b/drivers/s390/virtio/virtio_ccw.c > @@ -388,31 +388,6 @@ static void virtio_ccw_drop_indicator(struct virtio_ccw_device *vcdev, > ccw_device_dma_free(vcdev->cdev, thinint_area, sizeof(*thinint_area)); > } > > -static inline long __do_kvm_notify(struct subchannel_id schid, > - unsigned long queue_index, > - long cookie) > -{ > - register unsigned long __nr asm("1") = KVM_S390_VIRTIO_CCW_NOTIFY; > - register struct subchannel_id __schid asm("2") = schid; > - register unsigned long __index asm("3") = queue_index; > - register long __rc asm("2"); > - register long __cookie asm("4") = cookie; > - > - asm volatile ("diag 2,4,0x500\n" > - : "=d" (__rc) : "d" (__nr), "d" (__schid), "d" (__index), > - "d"(__cookie) > - : "memory", "cc"); > - return __rc; > -} > - > -static inline long do_kvm_notify(struct subchannel_id schid, > - unsigned long queue_index, > - long cookie) > -{ > - diag_stat_inc(DIAG_STAT_X500); > - return __do_kvm_notify(schid, queue_index, cookie); > -} > - > static bool virtio_ccw_kvm_notify(struct virtqueue *vq) > { > struct virtio_ccw_vq_info *info = vq->priv; > @@ -421,7 +396,10 @@ static bool virtio_ccw_kvm_notify(struct virtqueue *vq) > > vcdev = to_vc_device(info->vq->vdev); > ccw_device_get_schid(vcdev->cdev, &schid); > - info->cookie = do_kvm_notify(schid, vq->index, info->cookie); > + BUILD_BUG_ON(sizeof(struct subchannel_id) != sizeof(unsigned int)); > + info->cookie = kvm_hypercall3(KVM_S390_VIRTIO_CCW_NOTIFY, > + *((unsigned int *)&schid), > + vq->index, info->cookie); if (info->cookie < 0) > return false; > return true; >
On Mon, Jun 21, 2021 at 05:27:00PM +0200, Cornelia Huck wrote: > On Mon, Jun 21 2021, Heiko Carstens <hca@linux.ibm.com> wrote: > > > do_kvm_notify() and __do_kvm_notify() are an (exact) open-coded variant > > of kvm_hypercall3(). Therefore simply make use of kvm_hypercall3(), > > and get rid of duplicated code. > > > > Signed-off-by: Heiko Carstens <hca@linux.ibm.com> > > --- > > drivers/s390/virtio/virtio_ccw.c | 30 ++++-------------------------- > > 1 file changed, 4 insertions(+), 26 deletions(-) > > > > Hm, I wonder why I didn't use kvm_hypercall3 in the first place. It's in > a header, and therefore should be independent of kvm being configured. > > I don't think there's anything else virtio-ccw in flight at the moment, > so maybe you can apply this one directly? Yes, sure. > Reviewed-by: Cornelia Huck <cohuck@redhat.com> Thank you!
On Mon, 21 Jun 2021 16:45:22 +0200 Heiko Carstens <hca@linux.ibm.com> wrote: > do_kvm_notify() and __do_kvm_notify() are an (exact) open-coded variant > of kvm_hypercall3(). Therefore simply make use of kvm_hypercall3(), > and get rid of duplicated code. > > Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c index 54e686dca6de..d35e7a3f7067 100644 --- a/drivers/s390/virtio/virtio_ccw.c +++ b/drivers/s390/virtio/virtio_ccw.c @@ -388,31 +388,6 @@ static void virtio_ccw_drop_indicator(struct virtio_ccw_device *vcdev, ccw_device_dma_free(vcdev->cdev, thinint_area, sizeof(*thinint_area)); } -static inline long __do_kvm_notify(struct subchannel_id schid, - unsigned long queue_index, - long cookie) -{ - register unsigned long __nr asm("1") = KVM_S390_VIRTIO_CCW_NOTIFY; - register struct subchannel_id __schid asm("2") = schid; - register unsigned long __index asm("3") = queue_index; - register long __rc asm("2"); - register long __cookie asm("4") = cookie; - - asm volatile ("diag 2,4,0x500\n" - : "=d" (__rc) : "d" (__nr), "d" (__schid), "d" (__index), - "d"(__cookie) - : "memory", "cc"); - return __rc; -} - -static inline long do_kvm_notify(struct subchannel_id schid, - unsigned long queue_index, - long cookie) -{ - diag_stat_inc(DIAG_STAT_X500); - return __do_kvm_notify(schid, queue_index, cookie); -} - static bool virtio_ccw_kvm_notify(struct virtqueue *vq) { struct virtio_ccw_vq_info *info = vq->priv; @@ -421,7 +396,10 @@ static bool virtio_ccw_kvm_notify(struct virtqueue *vq) vcdev = to_vc_device(info->vq->vdev); ccw_device_get_schid(vcdev->cdev, &schid); - info->cookie = do_kvm_notify(schid, vq->index, info->cookie); + BUILD_BUG_ON(sizeof(struct subchannel_id) != sizeof(unsigned int)); + info->cookie = kvm_hypercall3(KVM_S390_VIRTIO_CCW_NOTIFY, + *((unsigned int *)&schid), + vq->index, info->cookie); if (info->cookie < 0) return false; return true;
do_kvm_notify() and __do_kvm_notify() are an (exact) open-coded variant of kvm_hypercall3(). Therefore simply make use of kvm_hypercall3(), and get rid of duplicated code. Signed-off-by: Heiko Carstens <hca@linux.ibm.com> --- drivers/s390/virtio/virtio_ccw.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-)