Hi Maxime and Olivier: On Thu, Sep 07, 2017 at 02:13:43PM +0200, Olivier Matz wrote: [...] > diff --git a/drivers/net/virtio/virtio_ethdev.c > b/drivers/net/virtio/virtio_ethdev.c > index 8eee3ff80..c7888f103 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -1737,6 +1737,19 @@ virtio_dev_start(struct rte_eth_dev *dev) > struct virtnet_rx *rxvq; > struct virtnet_tx *txvq __rte_unused; > struct virtio_hw *hw = dev->data->dev_private; > + int ret; > + > + /* Finish the initialization of the queues */ > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > + ret = virtio_dev_rx_queue_setup_finish(dev, i); > + if (ret < 0) > + return ret; > + }
I'm trying to fix an issue [1] reported by Antonio. And during the debugging, I found that vector Rx of virtio PMD has been broken (when doing port stop/start) since below two patches were applied: 25bf7a0b0936 ("vhost: make error handling consistent in Rx path") -- needed on the Tx side (testpmd/vhost-pmd in below test) efc83a1e7fc3 ("net/virtio: fix queue setup consistency") -- needed on the Rx side (testpmd/virtio-user in below test) Below are the steps to reproduce the issue: #0. Checkout the commit # 25bf7a0b0936 was applied after efc83a1e7fc3 git checkout 25bf7a0b0936 (There is another vector Rx bug caused by rxq flushing on the HEAD. So it's better to checkout the old commit first.) #1. Apply below patch to disable mergeable Rx, and build DPDK diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h index 2039bc5..d45ffa5 100644 --- a/drivers/net/virtio/virtio_ethdev.h +++ b/drivers/net/virtio/virtio_ethdev.h @@ -65,7 +65,6 @@ 1u << VIRTIO_NET_F_CSUM | \ 1u << VIRTIO_NET_F_HOST_TSO4 | \ 1u << VIRTIO_NET_F_HOST_TSO6 | \ - 1u << VIRTIO_NET_F_MRG_RXBUF | \ 1u << VIRTIO_NET_F_MTU | \ 1u << VIRTIO_RING_F_INDIRECT_DESC | \ 1ULL << VIRTIO_F_VERSION_1 | \ #2. Launch testpmd/vhost-pmd: ./x86_64-native-linuxapp-gcc/app/testpmd -l 1,2 \ --socket-mem 1024,1024 \ --file-prefix=vhost \ --no-pci \ --vdev=net_vhost0,iface=/tmp/socket-0,queues=1 \ -- \ --port-topology=chained \ -i \ --nb-cores=1 #3. Launch testpmd/virtio-user: ./x86_64-native-linuxapp-gcc/app/testpmd -l 5,6 \ --socket-mem 1024,1024 \ --file-prefix=virtio-user \ --no-pci \ --vdev=net_virtio_user0,path=/tmp/socket-0 \ -- \ --port-topology=chained \ -i \ --nb-cores=1 \ --disable-hw-vlan \ --txqflags=0xf01 #4. In testpmd/virtio-user run below commands: testpmd> set fwd rxonly testpmd> start #5. In testpmd/vhost-pmd run below commands: testpmd> set burst 1 testpmd> set fwd rxonly testpmd> start tx_first 1 testpmd> stop #6. In testpmd/virtio-user run below commands: testpmd> stop testpmd> port stop all testpmd> port start all testpmd> start #7. In testpmd/vhost-pmd run below commands: testpmd> set fwd txonly testpmd> start #8. In testpmd/virtio-user run below commands: testpmd> show port stats all And you will see that there is no traffic any more after receiving a few hundred packets. [1] http://dpdk.org/ml/archives/dev/2017-December/082983.html Best regards, Tiwei Bie