netdev-dpdk: Fix thread-safety breach.
authorAlex Wang <alexw@nicira.com>
Mon, 15 Sep 2014 20:15:38 +0000 (13:15 -0700)
committerAlex Wang <alexw@nicira.com>
Mon, 15 Sep 2014 21:35:41 +0000 (14:35 -0700)
dpdk_eth_dev_init() must be called with dpdk_mutex.  However,
netdev_dpdk_set_multiq() fails to follow this rule.  This commit
fixes this breach.

Found by clang.

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Daniele Di Proietto <ddiproietto@vmware.com>
lib/netdev-dpdk.c

index e66eb6e..1e12e8b 100644 (file)
@@ -622,6 +622,7 @@ netdev_dpdk_set_multiq(struct netdev *netdev_, unsigned int n_txq,
         return err;
     }
 
+    ovs_mutex_lock(&dpdk_mutex);
     ovs_mutex_lock(&netdev->mutex);
     rte_eth_dev_stop(netdev->port_id);
     netdev->up.n_txq = n_txq;
@@ -632,6 +633,7 @@ netdev_dpdk_set_multiq(struct netdev *netdev_, unsigned int n_txq,
         netdev_dpdk_set_txq(netdev, n_txq);
     }
     ovs_mutex_unlock(&netdev->mutex);
+    ovs_mutex_unlock(&dpdk_mutex);
 
     return err;
 }