Michael S. Tsirkin
2020-Aug-05 11:53 UTC
[PATCH 2/2] vhost_vdpa: unified set_vq_irq() and update_vq_irq()
On Wed, Aug 05, 2020 at 07:38:32PM +0800, Zhu Lingshan wrote:> This commit merge vhost_vdpa_update_vq_irq() logics into > vhost_vdpa_setup_vq_irq(), so that code are unified. > > In vhost_vdpa_setup_vq_irq(), added checks for the existence > for get_vq_irq(). > > Signed-off-by: Zhu Lingshan <lingshan.zhu at intel.com>which commit should I squash this into? commit f8e695e9dbd88464bc3d1f01769229dedf8f30d6 Author: Zhu Lingshan <lingshan.zhu at intel.com> Date: Fri Jul 31 14:55:31 2020 +0800 vhost_vdpa: implement IRQ offloading in vhost_vdpa this one?> --- > drivers/vhost/vdpa.c | 28 ++++++---------------------- > 1 file changed, 6 insertions(+), 22 deletions(-) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index 26f166a8192e..044e1f54582a 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -122,8 +122,12 @@ static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid) > struct vdpa_device *vdpa = v->vdpa; > int ret, irq; > > - spin_lock(&vq->call_ctx.ctx_lock); > + if (!ops->get_vq_irq) > + return; > + > irq = ops->get_vq_irq(vdpa, qid); > + spin_lock(&vq->call_ctx.ctx_lock); > + irq_bypass_unregister_producer(&vq->call_ctx.producer); > if (!vq->call_ctx.ctx || irq < 0) { > spin_unlock(&vq->call_ctx.ctx_lock); > return; > @@ -144,26 +148,6 @@ static void vhost_vdpa_unsetup_vq_irq(struct vhost_vdpa *v, u16 qid) > spin_unlock(&vq->call_ctx.ctx_lock); > } > > -static void vhost_vdpa_update_vq_irq(struct vhost_virtqueue *vq) > -{ > - spin_lock(&vq->call_ctx.ctx_lock); > - /* > - * if it has a non-zero irq, means there is a > - * previsouly registered irq_bypass_producer, > - * we should update it when ctx (its token) > - * changes. > - */ > - if (!vq->call_ctx.producer.irq) { > - spin_unlock(&vq->call_ctx.ctx_lock); > - return; > - } > - > - irq_bypass_unregister_producer(&vq->call_ctx.producer); > - vq->call_ctx.producer.token = vq->call_ctx.ctx; > - irq_bypass_register_producer(&vq->call_ctx.producer); > - spin_unlock(&vq->call_ctx.ctx_lock); > -} > - > static void vhost_vdpa_reset(struct vhost_vdpa *v) > { > struct vdpa_device *vdpa = v->vdpa; > @@ -452,7 +436,7 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, > cb.private = NULL; > } > ops->set_vq_cb(vdpa, idx, &cb); > - vhost_vdpa_update_vq_irq(vq); > + vhost_vdpa_setup_vq_irq(v, idx); > break; > > case VHOST_SET_VRING_NUM: > -- > 2.18.4