[PATCH] test/event_eth_rx_intr_adapter: support NICs with fewer int vectors
Loftus, Ciara
ciara.loftus at intel.com
Wed Apr 22 12:18:09 CEST 2026
> Subject: [PATCH] test/event_eth_rx_intr_adapter: support NICs with fewer int
> vectors
>
> Some NICs may not be able to support interrupts on all queues that are
> advertised, which will cause the test to fail if the queues supporting
> interrupts are fewer than 64. We can work around this by retrying the
> NIC configuration multiple times with fewer queues in case of failure.
> This allows the test to pass with NICs using ixgbe driver, for example.
>
> Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
LGTM.
Acked-by: Ciara Loftus <ciara.loftus at intel.com>
> ---
> app/test/test_event_eth_rx_adapter.c | 52 +++++++++++++++++-----------
> 1 file changed, 32 insertions(+), 20 deletions(-)
>
> diff --git a/app/test/test_event_eth_rx_adapter.c
> b/app/test/test_event_eth_rx_adapter.c
> index ae428b3333..7b38935bec 100644
> --- a/app/test/test_event_eth_rx_adapter.c
> +++ b/app/test/test_event_eth_rx_adapter.c
> @@ -60,6 +60,7 @@ port_init_common(uint16_t port, const struct
> rte_eth_conf *port_conf,
> {
> const uint16_t rx_ring_size = 512, tx_ring_size = 512;
> int retval;
> + bool started = false;
> uint16_t q;
> struct rte_eth_dev_info dev_info;
>
> @@ -76,32 +77,43 @@ port_init_common(uint16_t port, const struct
> rte_eth_conf *port_conf,
> MAX_NUM_RX_QUEUE);
> default_params.tx_rings = 1;
>
> - /* Configure the Ethernet device. */
> - retval = rte_eth_dev_configure(port, default_params.rx_rings,
> + while (!started) {
> + /* Configure the Ethernet device. */
> + retval = rte_eth_dev_configure(port, default_params.rx_rings,
> default_params.tx_rings, port_conf);
> - if (retval != 0)
> - return retval;
> -
> - for (q = 0; q < default_params.rx_rings; q++) {
> - retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
> - rte_eth_dev_socket_id(port), NULL, mp);
> - if (retval < 0)
> + if (retval != 0)
> return retval;
> - }
>
> - /* Allocate and set up 1 TX queue per Ethernet port. */
> - for (q = 0; q < default_params.tx_rings; q++) {
> - retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
> - rte_eth_dev_socket_id(port), NULL);
> - if (retval < 0)
> + for (q = 0; q < default_params.rx_rings; q++) {
> + retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
> + rte_eth_dev_socket_id(port), NULL,
> mp);
> + if (retval < 0)
> + return retval;
> + }
> +
> + /* Allocate and set up 1 TX queue per Ethernet port. */
> + for (q = 0; q < default_params.tx_rings; q++) {
> + retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
> + rte_eth_dev_socket_id(port), NULL);
> + if (retval < 0)
> + return retval;
> + }
> +
> + /* Start the Ethernet port. */
> + retval = rte_eth_dev_start(port);
> + if (retval < 0) {
> + /* Some NICs may not support interrupts on all
> reported queues.
> + * Therefore try to reconfigure and start with fewer
> queues
> + */
> + if (default_params.rx_rings > 2) {
> + default_params.rx_rings /= 2;
> + continue;
> + }
> return retval;
> + }
> + started = true;
> }
>
> - /* Start the Ethernet port. */
> - retval = rte_eth_dev_start(port);
> - if (retval < 0)
> - return retval;
> -
> /* Display the port MAC address. */
> struct rte_ether_addr addr;
> retval = rte_eth_macaddr_get(port, &addr);
> --
> 2.51.0
More information about the dev
mailing list