diff --git a/build/external/packages/dpdk.mk b/build/external/packages/dpdk.mk index 8ee65faac..44cbdfc13 100644 --- a/build/external/packages/dpdk.mk +++ b/build/external/packages/dpdk.mk @@ -38,7 +38,7 @@ dpdk_depends := $(if $(ARCH_X86_64), ipsec-mb) else dpdk_depends := rdma-core $(if $(ARCH_X86_64), ipsec-mb) endif -DPDK_MLX_DEFAULT := $(shell if grep -q "rdma=$(rdma-core_version) dpdk=$(dpdk_version)" mlx_rdma_dpdk_matrix.txt; then echo 'y'; else echo 'n'; fi) +DPDK_MLX_DEFAULT := y DPDK_MLX4_PMD ?= $(DPDK_MLX_DEFAULT) DPDK_MLX5_PMD ?= $(DPDK_MLX_DEFAULT) DPDK_MLX5_COMMON_PMD ?= $(DPDK_MLX_DEFAULT) diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index 453d9cff7..c93870cdc 100644 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -306,6 +306,8 @@ dpdk_lib_init (dpdk_main_t * dm) vnet_hw_interface_t *hi; dpdk_device_t *xd; char *if_num_fmt; + u8 mlx4_devlist[64]; + int mlx4_devlist_idx = 0; /* vlib_buffer_t template */ vec_validate_aligned (dm->per_thread_data, tm->n_vlib_mains - 1, @@ -426,7 +428,27 @@ dpdk_lib_init (dpdk_main_t * dm) xd->name = format (xd->name, "Ethernet"); } - if (dr && dr->interface_number_from_port_id) + int mlx4_port_num = 0; + + if (strstr (di.driver_name, "net_mlx4") && + (pci_dev = dpdk_get_pci_device (&di))) + { + for (int i = 0; i < sizeof (mlx4_devlist); i++) + { + if (mlx4_devlist[i] == pci_dev->addr.bus) + { + dpdk_log_warn ("Dev ID %u with driver %s already " + "existing, giving next port", + pci_dev->addr.bus, di.driver_name); + mlx4_port_num++; + } + } + mlx4_devlist[mlx4_devlist_idx] = pci_dev->addr.bus; + mlx4_devlist_idx++; + xd->name = format (xd->name, "%u/%u/%u", pci_dev->addr.bus, + pci_dev->addr.devid, mlx4_port_num); + } + else if (dr && dr->interface_number_from_port_id) xd->name = format (xd->name, "%u", port_id); else if ((pci_dev = dpdk_get_pci_device (&di))) xd->name = format (xd->name, if_num_fmt, pci_dev->addr.bus,