On Tue, Aug 12, 2014 at 10:43 AM, Daniele Di Proietto <ddiproie...@vmware.com> wrote: > rte_eth_tx_burst() _should_ transmit every packet that it is passed unless the > queue is full. Nontheless some implementation of rte_eth_tx_burst (e.g. > ixgbe_xmit_pkts_vec()) does not transmit more than a fixed number (32) of > packets at a time. > > With this commit we assume that there's an error only if rte_eth_tx_burst > returns 0. > > Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com>
looks good. Pushed patch to master. Thanks, Pravin. > --- > lib/netdev-dpdk.c | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index f2202b4..97206e6 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -621,9 +621,20 @@ static inline void > dpdk_queue_flush__(struct netdev_dpdk *dev, int qid) > { > struct dpdk_tx_queue *txq = &dev->tx_q[qid]; > - uint32_t nb_tx; > + uint32_t nb_tx = 0; > + > + while (nb_tx != txq->count) { > + uint32_t ret; > + > + ret = rte_eth_tx_burst(dev->port_id, qid, txq->burst_pkts + nb_tx, > + txq->count - nb_tx); > + if (!ret) { > + break; > + } > + > + nb_tx += ret; > + } > > - nb_tx = rte_eth_tx_burst(dev->port_id, qid, txq->burst_pkts, txq->count); > if (OVS_UNLIKELY(nb_tx != txq->count)) { > /* free buffers, which we couldn't transmit, one at a time (each > * packet could come from a different mempool) */ > @@ -632,7 +643,11 @@ dpdk_queue_flush__(struct netdev_dpdk *dev, int qid) > for (i = nb_tx; i < txq->count; i++) { > rte_pktmbuf_free_seg(txq->burst_pkts[i]); > } > + ovs_mutex_lock(&dev->mutex); > + dev->stats.tx_dropped += txq->count-nb_tx; > + ovs_mutex_unlock(&dev->mutex); > } > + > txq->count = 0; > txq->tsc = rte_get_timer_cycles(); > } > -- > 2.0.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev