From 5b22339973feaa3eba48ead1e9fb428b1816c0cc Mon Sep 17 00:00:00 2001 From: Maxime Peim Date: Thu, 6 May 2021 12:17:25 +0200 Subject: interface: full poll vector on adaptive mode When an input supports adaptive mode and enters in polling, some rx queues may be missing from the node's rx_poll_vector. To solve the issue, a full poll vector is being computed in vnet_hw_if_update_runtime_data, and returned by vnet_hw_if_get_rxq_poll_vector when the node is polling in adaptive mode. Type: fix Signed-off-by: Maxime Peim Change-Id: I249bcb20ae0dd28afb0a5ca32993092bafd2f6b1 --- src/vnet/interface/rx_queue_funcs.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/vnet/interface/rx_queue_funcs.h') diff --git a/src/vnet/interface/rx_queue_funcs.h b/src/vnet/interface/rx_queue_funcs.h index 26dc1b8777f..83f1bac4e94 100644 --- a/src/vnet/interface/rx_queue_funcs.h +++ b/src/vnet/interface/rx_queue_funcs.h @@ -69,11 +69,14 @@ static_always_inline vnet_hw_if_rxq_poll_vector_t * vnet_hw_if_get_rxq_poll_vector (vlib_main_t *vm, vlib_node_runtime_t *node) { vnet_hw_if_rx_node_runtime_t *rt = (void *) node->runtime_data; + vnet_hw_if_rxq_poll_vector_t *pv = rt->rxq_vector_int; if (PREDICT_FALSE (node->state == VLIB_NODE_STATE_INTERRUPT)) vnet_hw_if_generate_rxq_int_poll_vector (vm, node); + else if (node->flags & VLIB_NODE_FLAG_ADAPTIVE_MODE) + pv = rt->rxq_vector_poll; - return rt->rxq_poll_vector; + return pv; } static_always_inline u8 -- cgit 1.2.3-korg