On Tue, Aug 12, 2014 at 10:43 AM, Daniele Di Proietto
<[email protected]> 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 <[email protected]>
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
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev