[dpdk-dev] [PATCH] net/virtio: fix an incorrect behavior of device stop/start

Jens Freimann jfreimann at redhat.com
Wed Aug 30 11:13:06 CEST 2017


Hi Tiwei,

On Tue, Aug 29, 2017 at 04:26:01PM +0800, Tiwei Bie wrote:
>After starting a device, the driver shouldn't deliver the
>packets that already existed in the device before it is
>started to the applications. This patch fixes this issue
>by flushing the Rx queues when starting the device.
>
>Fixes: a85786dc816f ("virtio: fix states handling during initialization")
>Cc: stable at dpdk.org
>
>Signed-off-by: Tiwei Bie <tiwei.bie at intel.com>
>---
> drivers/net/virtio/virtio_ethdev.c |  6 ++++++
> drivers/net/virtio/virtio_rxtx.c   |  2 +-
> drivers/net/virtio/virtqueue.c     | 25 +++++++++++++++++++++++++
> drivers/net/virtio/virtqueue.h     |  5 +++++
> 4 files changed, 37 insertions(+), 1 deletion(-)

why don't we flush Tx queues as well?

>
>diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
>index e320811..6d60bc1 100644
>--- a/drivers/net/virtio/virtio_ethdev.c
>+++ b/drivers/net/virtio/virtio_ethdev.c
>@@ -1737,6 +1737,12 @@ virtio_dev_start(struct rte_eth_dev *dev)
> 		}
> 	}
>
>+	/* Flush the packets in Rx queues. */
>+	for (i = 0; i < dev->data->nb_rx_queues; i++) {
>+		rxvq = dev->data->rx_queues[i];
>+		virtqueue_flush(rxvq->vq);
>+	}
>+

A little bit further down is a for loop going over rx queues calling
notify. Could we flush directly before the notify and save the
additional loop?

regards,
Jens 


More information about the dev mailing list