From be0e48201975123de8fba13b3c1ece8d33ca39bc Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Fri, 22 Feb 2019 17:25:00 +0100 Subject: avf: fix eat own tail issue on tx Change-Id: Ie14ca18bab47ac6765ff0799475d0c2a4d936f90 Signed-off-by: Damjan Marion --- src/plugins/avf/output.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/avf/output.c b/src/plugins/avf/output.c index 0db333be823..f73002f7be7 100644 --- a/src/plugins/avf/output.c +++ b/src/plugins/avf/output.c @@ -45,6 +45,9 @@ avf_tx_enqueue (vlib_main_t * vm, avf_txq_t * txq, u32 * buffers, /* avoid ring wrap */ n_desc_left = txq->size - clib_max (txq->next, txq->n_enqueued + 8); + if (n_desc_left == 0) + return 0; + while (n_packets_left && n_desc_left) { u32 or_flags; @@ -140,7 +143,7 @@ VNET_DEVICE_CLASS_TX_FN (avf_device_class) (vlib_main_t * vm, avf_txq_t *txq = vec_elt_at_index (ad->txqs, qid % ad->num_queue_pairs); u32 *buffers = vlib_frame_vector_args (frame); u16 n_enq, n_left; - u16 n_retry = 5; + u16 n_retry = 2; clib_spinlock_lock_if_init (&txq->lock); @@ -158,10 +161,11 @@ retry: if (slot == 0) break; - complete_slot = slot[0]; - if (avf_tx_desc_get_dtyp (txq->descs + complete_slot) != 0x0F) + if (avf_tx_desc_get_dtyp (txq->descs + slot[0]) != 0x0F) break; + complete_slot = slot[0]; + clib_ring_deq (txq->rs_slots); } -- cgit 1.2.3-korg