How about changing Œnetdev_dpdk_set_txq()¹ to 'netdev_dpdk_alloc_txq()¹?
IMHO it is more clear that it is allocating memory without freeing it.

Otherwise, LGTM. Thanks for the fix

Acked-by: Daniele Di Proietto <ddiproie...@vmware.com>

On 9/19/14, 10:57 AM, "Alex Wang" <al...@nicira.com> wrote:

>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

Reply via email to