af_xdp: ensure at least one queue is created 32/33932/5
authorJoshua Roys <roysjosh@gmail.com>
Fri, 1 Oct 2021 20:41:04 +0000 (16:41 -0400)
committerBeno�t Ganne <bganne@cisco.com>
Mon, 11 Oct 2021 07:37:52 +0000 (07:37 +0000)
Attempting to create an af_xdp interface with zerocopy where the
underlying driver didn't support it would lead to a crash due to
queue creation silently failing.

Type: fix

Signed-off-by: Joshua Roys <roysjosh@gmail.com>
Change-Id: Ifd9070b8c2b3023d71120c5cf20f7e89d04e4cb3

src/plugins/af_xdp/device.c

index 30d3c95..8365a71 100644 (file)
@@ -460,6 +460,8 @@ af_xdp_create_if (vlib_main_t * vm, af_xdp_create_if_args_t * args)
           * requested 'max'
           * we might create less tx queues than workers but this is ok
           */
+         af_xdp_log (VLIB_LOG_LEVEL_DEBUG, ad,
+                     "create interface failed to create queue qid=%d", i);
 
          /* fixup vectors length */
          vec_set_len (ad->umem, i);
@@ -470,7 +472,8 @@ af_xdp_create_if (vlib_main_t * vm, af_xdp_create_if_args_t * args)
          ad->rxq_num = clib_min (i, rxq_num);
          ad->txq_num = clib_min (i, txq_num);
 
-         if (i < rxq_num && AF_XDP_NUM_RX_QUEUES_ALL != args->rxq_num)
+         if (i == 0 ||
+             (i < rxq_num && AF_XDP_NUM_RX_QUEUES_ALL != args->rxq_num))
            {
              ad->rxq_num = ad->txq_num = 0;
              goto err1; /* failed creating requested rxq: fatal error, bailing