Message ID | 20200805113832.3755-1-lingshan.zhu@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] vDPA: get_vq_irq() should be optional | expand |
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@intel.com> which commit should I squash this into? commit f8e695e9dbd88464bc3d1f01769229dedf8f30d6 Author: Zhu Lingshan <lingshan.zhu@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
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:
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@intel.com> --- drivers/vhost/vdpa.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-)