[dpdk-dev] net/virtio-user: send kick to tx queue to notify backend on initialization

Message ID 20170801161736.83502-1-sluong@cisco.com (mailing list archive)
State Accepted, archived
Delegated to: Yuanhan Liu
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK

Commit Message

Steven Aug. 1, 2017, 4:17 p.m. UTC
  Acccording to the spec, https://fossies.org/linux/qemu/docs/specs/vhost-user.txt

client must start ring upon receiving a kick (that is, detecting that file
descriptor is reachable) on the descriptor specified by
VHOST_USER_SET_VRING_KICK.

The code sends a kick to the rx queue. It is missing sending a kick for the
tx queue. This patch is to add the missing code to comply with the spec.

Signed-off-by: Steven <sluong@cisco.com>
---
 drivers/net/virtio/virtio_ethdev.c | 5 +++++
 1 file changed, 5 insertions(+)
  

Comments

steven luong Sept. 11, 2017, 2:29 p.m. UTC | #1
Dear Maxime and Yuanhan,

Do you have any more question on this patch? According to the text in the spec, the vring/queue is supposed to be disable until a kick is received. This is to ensure that the kickfd is working properly prior to the operation and I think it makes sense. The only exception to this rule is when the driver opts out for the interrupt support (no kickfd) in VHOST_USER_SET_VRING_KICK message.

Steven

On 8/3/17, 7:12 AM, "dev on behalf of Steven Luong (sluong)" <dev-bounces@dpdk.org on behalf of sluong@cisco.com> wrote:

    Maxime,
    
    Thank you so much for the reply.
    
    1. It’s about conforming to the spec. Please read the text as I quoted in the email. A non-conforming implementation does not communicate with a conforming implementation such as VPP.
    2. QEMU’s implementation is conforming and it is sending kick for both TX and RX queues upon initialization.
    
    Steven
    
    On 8/3/17, 2:37 AM, "dev on behalf of Maxime Coquelin" <dev-bounces@dpdk.org on behalf of maxime.coquelin@redhat.com> wrote:
    
        Hi Steven,
        
        On 08/01/2017 06:17 PM, Steven wrote:
        > Acccording to the spec, https://fossies.org/linux/qemu/docs/specs/vhost-user.txt

        > 

        > client must start ring upon receiving a kick (that is, detecting that file

        > descriptor is reachable) on the descriptor specified by

        > VHOST_USER_SET_VRING_KICK.

        > 

        > The code sends a kick to the rx queue. It is missing sending a kick for the

        > tx queue. This patch is to add the missing code to comply with the spec.

        > 

        > Signed-off-by: Steven <sluong@cisco.com>

        > ---

        >   drivers/net/virtio/virtio_ethdev.c | 5 +++++

        >   1 file changed, 5 insertions(+)

        > 

        > diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c

        > index 00a3122..6362e14 100644

        > --- a/drivers/net/virtio/virtio_ethdev.c

        > +++ b/drivers/net/virtio/virtio_ethdev.c

        > @@ -1747,6 +1747,11 @@ virtio_dev_start(struct rte_eth_dev *dev)

        >   		virtqueue_notify(rxvq->vq);

        >   	}

        >   

        > +	for (i = 0; i < dev->data->nb_tx_queues; i++) {

        > +		txvq = dev->data->tx_queues[i];

        > +		virtqueue_notify(txvq->vq);

        > +	}

        > +

        
        I'm not sure to get why we would need to send Txq notification whereas
        no packet have been enqueued. That said, I don't think it hurts.
        
        Steven, does it solve a real problem you are facing with virtio-user?
        
        Yuanhan, what's your opinion on this?
        
        Cheers,
        Maxime
  
Yuanhan Liu Sept. 12, 2017, 2:30 a.m. UTC | #2
On Tue, Aug 01, 2017 at 09:17:36AM -0700, Steven wrote:
> Acccording to the spec, https://fossies.org/linux/qemu/docs/specs/vhost-user.txt
> 
> client must start ring upon receiving a kick (that is, detecting that file
> descriptor is reachable) on the descriptor specified by
> VHOST_USER_SET_VRING_KICK.
> 
> The code sends a kick to the rx queue. It is missing sending a kick for the
> tx queue. This patch is to add the missing code to comply with the spec.
> 
> Signed-off-by: Steven <sluong@cisco.com>

Applied to dpdk-next-virtio.

Thanks.

	--yliu
  

Patch

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 00a3122..6362e14 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1747,6 +1747,11 @@  virtio_dev_start(struct rte_eth_dev *dev)
 		virtqueue_notify(rxvq->vq);
 	}
 
+	for (i = 0; i < dev->data->nb_tx_queues; i++) {
+		txvq = dev->data->tx_queues[i];
+		virtqueue_notify(txvq->vq);
+	}
+
 	PMD_INIT_LOG(DEBUG, "Notified backend at initialization");
 
 	for (i = 0; i < dev->data->nb_rx_queues; i++) {