dpdk: bump to DPDK v21.11
[vpp.git] / src / plugins / dpdk / device / common.c
index 8396386..3eca847 100644 (file)
@@ -103,7 +103,10 @@ dpdk_device_setup (dpdk_device_t * xd)
   if (xd->conf.disable_multi_seg == 0)
     {
       txo |= DEV_TX_OFFLOAD_MULTI_SEGS;
-      rxo |= DEV_RX_OFFLOAD_JUMBO_FRAME | DEV_RX_OFFLOAD_SCATTER;
+      rxo |= DEV_RX_OFFLOAD_SCATTER;
+#if RTE_VERSION < RTE_VERSION_NUM(21, 11, 0, 0)
+      rxo |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+#endif
     }
 
   if (xd->conf.enable_lro)
@@ -156,13 +159,31 @@ dpdk_device_setup (dpdk_device_t * xd)
        }
     }
 
+#if RTE_VERSION < RTE_VERSION_NUM(21, 11, 0, 0)
   if (rxo & DEV_RX_OFFLOAD_JUMBO_FRAME)
     conf.rxmode.max_rx_pkt_len =
       clib_min (ETHERNET_MAX_PACKET_BYTES, dev_info.max_rx_pktlen);
-
+#else
+  dpdk_log_debug ("[%u] min_mtu: %u, max_mtu: %u, min_rx_bufsize: %u, "
+                 "max_rx_pktlen: %u, max_lro_pkt_size: %u",
+                 xd->port_id, dev_info.min_mtu, dev_info.max_mtu,
+                 dev_info.min_rx_bufsize, dev_info.max_rx_pktlen,
+                 dev_info.max_lro_pkt_size);
+
+  mtu = xd->conf.disable_multi_seg ? 2000 : ETHERNET_MAX_PACKET_BYTES;
+  conf.rxmode.mtu = clib_min (mtu, dev_info.max_rx_pktlen);
+#endif
+
+retry:
   rv = rte_eth_dev_configure (xd->port_id, xd->conf.n_rx_queues,
                              xd->conf.n_tx_queues, &conf);
 
+  if (rv < 0 && conf.intr_conf.rxq)
+    {
+      conf.intr_conf.rxq = 0;
+      goto retry;
+    }
+
   if (rv < 0)
     {
       dpdk_device_error (xd, "rte_eth_dev_configure", rv);