dpdk: fix Unknown interface with Mellanox NIC 30/12530/2
authorSteve Shin <jonshin@cisco.com>
Thu, 10 May 2018 21:14:52 +0000 (14:14 -0700)
committerJohn Lo <loj@cisco.com>
Fri, 11 May 2018 22:47:43 +0000 (22:47 +0000)
When port_type_from_speed_capa() is called before the port link update isn't completed,
xd->port_type becomes VNET_DPDK_PORT_TYPE_UNKNOWN. This happens with Mellanox NIC
without lsc interrupt. Calling rte_eth_link_get before getting dev_info will ensure
the link state is up-to-date.

Change-Id: I83a59654778eb4bf0c65a4a4e225a326227b9641
Signed-off-by: Steve Shin <jonshin@cisco.com>
src/plugins/dpdk/device/init.c

index 9d4c0fd..aca57a0 100755 (executable)
@@ -262,6 +262,7 @@ dpdk_lib_init (dpdk_main_t * dm)
       vlib_pci_addr_t pci_addr;
       uword *p = 0;
 
+      rte_eth_link_get_nowait (i, &l);
       rte_eth_dev_info_get (i, &dev_info);
       if (dev_info.pci_dev)    /* bonded interface has no pci info */
        {
@@ -433,7 +434,6 @@ dpdk_lib_init (dpdk_main_t * dm)
 
              /* Cisco VIC */
            case VNET_DPDK_PMD_ENIC:
-             rte_eth_link_get_nowait (i, &l);
              if (l.link_speed == 40000)
                xd->port_type = VNET_DPDK_PORT_TYPE_ETH_40G;
              else