From: Damjan Marion Date: Wed, 25 Mar 2020 10:44:41 +0000 (+0100) Subject: avf: fix rx queue refill on buffer alloc failure X-Git-Tag: v20.09-rc0~344 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=e7f7190381c66cca6c1c3c77b3d43148818a5a4e 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 --- 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; }