[PATCH v7 05/18] vdpa/ifc: add vDPA interrupt for blk device
Xia, Chenbo
chenbo.xia at intel.com
Wed May 11 16:35:34 CEST 2022
> -----Original Message-----
> From: Pei, Andy <andy.pei at intel.com>
> Sent: Wednesday, April 27, 2022 4:30 PM
> To: dev at dpdk.org
> Cc: Xia, Chenbo <chenbo.xia at intel.com>; maxime.coquelin at redhat.com; Cao,
> Gang <gang.cao at intel.com>; Liu, Changpeng <changpeng.liu at intel.com>
> Subject: [PATCH v7 05/18] vdpa/ifc: add vDPA interrupt for blk device
>
> For the block device type, we use one queue to transfer
> both read and write requests, so we have to relay commands
relay interrupt?
I suggest using this commit log:
For the net device type, only interrupt of rxq needed to be relayed.
But for block, since all the queues are used for both read and write
requests. Interrupt of all queues needed to be relayed.
With this fixed:
Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>
> on all queues.
>
> Signed-off-by: Andy Pei <andy.pei at intel.com>
> ---
> drivers/vdpa/ifc/ifcvf_vdpa.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c
> index 8ee041f..07fc3ca 100644
> --- a/drivers/vdpa/ifc/ifcvf_vdpa.c
> +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c
> @@ -370,6 +370,7 @@ struct rte_vdpa_dev_info {
> irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX;
> irq_set->start = 0;
> fd_ptr = (int *)&irq_set->data;
> + /* The first interrupt is for the configure space change
> notification */
> fd_ptr[RTE_INTR_VEC_ZERO_OFFSET] =
> rte_intr_fd_get(internal->pdev->intr_handle);
>
> @@ -379,7 +380,13 @@ struct rte_vdpa_dev_info {
> for (i = 0; i < nr_vring; i++) {
> rte_vhost_get_vhost_vring(internal->vid, i, &vring);
> fd_ptr[RTE_INTR_VEC_RXTX_OFFSET + i] = vring.callfd;
> - if ((i & 1) == 0 && m_rx == true) {
> + if (m_rx == true &&
> + ((i & 1) == 0 || internal->device_type == IFCVF_BLK)) {
> + /* For the net we only need to relay rx queue,
> + * which will change the mem of VM.
> + * For the blk we need to relay all the read cmd
> + * of each queue
> + */
> fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
> if (fd < 0) {
> DRV_LOG(ERR, "can't setup eventfd: %s",
> --
> 1.8.3.1
More information about the dev
mailing list