Commit 5a0340 (dpif-netdev: Create multiple tx/rx queues when adding dpdk interface.) introduced a bug which causes the function netdev_dpdk_set_multiq() never resetting the tx queues. This bug could cause pmd thread accessing unassigned memory, resulting in segfault.
This commit fixes the bug. Reported-by: Ethan Jackson <et...@nicira.com> Signed-off-by: Alex Wang <al...@nicira.com> --- lib/netdev-dpdk.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ed39b9c..0101c7d 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -622,14 +622,15 @@ netdev_dpdk_set_multiq(struct netdev *netdev_, unsigned int n_txq, ovs_mutex_lock(&dpdk_mutex); ovs_mutex_lock(&netdev->mutex); + rte_eth_dev_stop(netdev->port_id); + netdev->up.n_txq = n_txq; netdev->up.n_rxq = n_rxq; + rte_free(netdev->tx_q); + netdev_dpdk_set_txq(netdev, n_txq); err = dpdk_eth_dev_init(netdev); - if (!err && netdev->up.n_txq != n_txq) { - rte_free(netdev->tx_q); - netdev_dpdk_set_txq(netdev, n_txq); - } + ovs_mutex_unlock(&netdev->mutex); ovs_mutex_unlock(&dpdk_mutex); -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev