On Fri, Sep 01, 2017 at 03:14:26PM +0800, Tiwei Bie wrote: > > > > 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.
Otherwise? I'm assuming you fixed a real issue? If so, it'd be better if you can add a bit info about the issue. > This patch fixes this issue > > > > > by flushing the Rx queues when starting the device. > > > > > > > > > > Fixes: a85786dc816f ("virtio: fix states handling during > > > > > initialization") ... > > > > > @@ -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? > > > > > > > > > > I saw there is also another `for' loop to dump the Rx queues. > > > And I think it makes the code more readable to flush the Rx > > > queues in a separate `for' loop too. Besides, this function > > > isn't performance critical. So I didn't combine them into one > > > `for' loop. > > > > To me code is better readable when it is concise, so I'd still vote for > > combining the loops if its logically equivalent. > > > > On the other hand I think this should be fixed soon, so > > > > Reviewed-by: Jens Freimann <jfreim...@redhat.com> > > > > Thank you! :-) > > It's not a big deal. I'd like to leave it up to the maintainers. > They can make the decision when applying the patch. I agree with Jens here. We already have too many for loops in this function. Let's not add yet another one. Besides that, the VIRTQUEU_DUMP loop probably should also be removed and more it to the notify loop. --yliu