[ovs-dev] [PATCH 2/2] netdev-dpdk: Fix a bug in netdev_dpdk_set_multiq().
Alex Wang
alexw at nicira.com
Fri Sep 19 17:57:12 UTC 2014
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 <ethan at nicira.com>
Signed-off-by: Alex Wang <alexw at 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
More information about the dev
mailing list