netdev-dpdk: Do not flush tx queue which is shared among CPUs since it is always...
authorWei li <liw@dtdream.com>
Thu, 25 Jun 2015 09:45:08 +0000 (02:45 -0700)
committerPravin B Shelar <pshelar@nicira.com>
Thu, 25 Jun 2015 18:19:04 +0000 (11:19 -0700)
When tx queue is shared among CPUS,the pkts always be flush
in 'netdev_dpdk_eth_send'. So it is unnecessarily for flushing
in netdev_dpdk_rxq_recv Otherwise tx will be accessed without
locking.

Signed-off-by: Wei li <liw@dtdream.com>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
lib/netdev-dpdk.c

index 3af1ee7..97689dd 100644 (file)
@@ -928,8 +928,11 @@ netdev_dpdk_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet **packets,
     int nb_rx;
 
     /* There is only one tx queue for this core.  Do not flush other
-     * queueus. */
-    if (rxq_->queue_id == rte_lcore_id()) {
+     * queues.
+     * Do not flush tx queue which is shared among CPUs
+     * since it is always flushed */
+    if (rxq_->queue_id == rte_lcore_id() &&
+        OVS_LIKELY(!dev->txq_needs_locking)) {
         dpdk_queue_flush(dev, rxq_->queue_id);
     }