diff mbox series

[V4,3/4] vhost_vdpa: don't setup irq offloading when irq_num < 0

Message ID 20220203072735.189716-4-lingshan.zhu@intel.com (mailing list archive)
State Changes Requested
Headers show
Series vDPA/ifcvf: implement shared IRQ feature | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Zhu, Lingshan Feb. 3, 2022, 7:27 a.m. UTC
When irq number is negative(e.g., -EINVAL), the virtqueue
may be disabled or the virtqueues are sharing a device irq.
In such case, we should not setup irq offloading for a virtqueue.

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
---
 drivers/vhost/vdpa.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Jason Wang Feb. 14, 2022, 6:28 a.m. UTC | #1
在 2022/2/3 下午3:27, Zhu Lingshan 写道:
> When irq number is negative(e.g., -EINVAL), the virtqueue
> may be disabled or the virtqueues are sharing a device irq.
> In such case, we should not setup irq offloading for a virtqueue.
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
>   drivers/vhost/vdpa.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
> index 851539807bc9..c4fcacb0de3a 100644
> --- a/drivers/vhost/vdpa.c
> +++ b/drivers/vhost/vdpa.c
> @@ -96,6 +96,10 @@ static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid)
>   	if (!ops->get_vq_irq)
>   		return;
>   
> +	irq = ops->get_vq_irq(vdpa, qid);
> +	if (irq < 0)
> +		return;
> +
>   	irq = ops->get_vq_irq(vdpa, qid);


So the get_vq_irq() will be called twice?


>   	irq_bypass_unregister_producer(&vq->call_ctx.producer);
>   	if (!vq->call_ctx.ctx || irq < 0)


We're already checked irq against 0 here.

Thanks
Zhu, Lingshan Feb. 14, 2022, 6:48 a.m. UTC | #2
On 2/14/2022 2:28 PM, Jason Wang wrote:
>
> 在 2022/2/3 下午3:27, Zhu Lingshan 写道:
>> When irq number is negative(e.g., -EINVAL), the virtqueue
>> may be disabled or the virtqueues are sharing a device irq.
>> In such case, we should not setup irq offloading for a virtqueue.
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>>   drivers/vhost/vdpa.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
>> index 851539807bc9..c4fcacb0de3a 100644
>> --- a/drivers/vhost/vdpa.c
>> +++ b/drivers/vhost/vdpa.c
>> @@ -96,6 +96,10 @@ static void vhost_vdpa_setup_vq_irq(struct 
>> vhost_vdpa *v, u16 qid)
>>       if (!ops->get_vq_irq)
>>           return;
>>   +    irq = ops->get_vq_irq(vdpa, qid);
>> +    if (irq < 0)
>> +        return;
>> +
>>       irq = ops->get_vq_irq(vdpa, qid);
>
>
> So the get_vq_irq() will be called twice?
yes, the latter one should be removed
>
>
>> irq_bypass_unregister_producer(&vq->call_ctx.producer);
>>       if (!vq->call_ctx.ctx || irq < 0)
>
>
> We're already checked irq against 0 here.
sure, will remove this

Thanks!
>
>
> Thanks
>
>
diff mbox series

Patch

diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 851539807bc9..c4fcacb0de3a 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -96,6 +96,10 @@  static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid)
 	if (!ops->get_vq_irq)
 		return;
 
+	irq = ops->get_vq_irq(vdpa, qid);
+	if (irq < 0)
+		return;
+
 	irq = ops->get_vq_irq(vdpa, qid);
 	irq_bypass_unregister_producer(&vq->call_ctx.producer);
 	if (!vq->call_ctx.ctx || irq < 0)