summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2020-03-25 11:44:41 +0100
committerDave Barach <openvpp@barachs.net>2020-03-25 11:53:20 +0000
commite7f7190381c66cca6c1c3c77b3d43148818a5a4e (patch)
tree85af0cd244129e3b2965e006539f840d70ab7c7f
parent4cfb0bf1b87d7a89898c20dfb9b145876c08fe02 (diff)
avf: fix rx queue refill on buffer alloc failure
If buffer alloc fails, it may happend that rx queue will be stuck as old code only refills if at least one packet is received. Type: fix Change-Id: I388c4f8a9fb2c208bdc222e31b443cbe6b94af82 Signed-off-by: Damjan Marion <damarion@cisco.com>
-rw-r--r--src/plugins/avf/input.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/plugins/avf/input.c b/src/plugins/avf/input.c
index 8d1ded88505..da5556a391e 100644
--- a/src/plugins/avf/input.c
+++ b/src/plugins/avf/input.c
@@ -364,12 +364,6 @@ no_more_desc:
or_qw1 |= or_q1x4[0] | or_q1x4[1] | or_q1x4[2] | or_q1x4[3];
#endif
- /* refill rx ring */
- if (ad->flags & AVF_DEVICE_F_VA_DMA)
- avf_rxq_refill (vm, node, rxq, 1 /* use_va_dma */ );
- else
- avf_rxq_refill (vm, node, rxq, 0 /* use_va_dma */ );
-
vlib_get_buffers (vm, to_next, ptd->bufs, n_rx_packets);
vnet_buffer (bt)->sw_if_index[VLIB_RX] = ad->sw_if_index;
@@ -437,6 +431,12 @@ no_more_desc:
ad->hw_if_index, n_rx_packets, n_rx_bytes);
done:
+ /* refill rx ring */
+ if (ad->flags & AVF_DEVICE_F_VA_DMA)
+ avf_rxq_refill (vm, node, rxq, 1 /* use_va_dma */ );
+ else
+ avf_rxq_refill (vm, node, rxq, 0 /* use_va_dma */ );
+
return n_rx_packets;
}