From e7f7190381c66cca6c1c3c77b3d43148818a5a4e Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Wed, 25 Mar 2020 11:44:41 +0100 Subject: [PATCH] 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 --- src/plugins/avf/input.c | 12 ++++++------ 1 file 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; } -- 2.16.6