The ROCE LAG bond device requires neither E-Switch nor SR-IOV configurations. It means the ROCE LAG bond device might be presented as a single port Infiniband device.
The mlx5 PMD wrongly recognized standalone ROCE LAG bond device as E-Switch configuration, this triggered the calls of E-Switch ports related API and the latter failed (over the new OFED kernel driver, starting since 5.4.1), causing the overall device probe failure. If there is a single port Infiniband bond device found the E-Switch related flags must be cleared indicating standalone configuration. Also, it is not true anymore the bond device can exist over E-Switch configurations only (as it was claimed for VF LAG bond devices). The related checks are not relevant anymore and removed. Fixes: 790164ce1d2d ("net/mlx5: check kernel support for VF LAG bonding") Cc: sta...@dpdk.org Signed-off-by: Viacheslav Ovsiienko <viachesl...@nvidia.com> Acked-by: Matan Azrad <ma...@nvidia.com> --- drivers/net/mlx5/linux/mlx5_os.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index aa5210fa45..e568cc9c48 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -2216,19 +2216,6 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev, goto exit; } } -#ifndef HAVE_MLX5DV_DR_DEVX_PORT - if (bd >= 0) { - /* - * This may happen if there is VF LAG kernel support and - * application is compiled with older rdma_core library. - */ - DRV_LOG(ERR, - "No kernel/verbs support for VF LAG bonding found."); - rte_errno = ENOTSUP; - ret = -rte_errno; - goto exit; - } -#endif /* * Now we can determine the maximal * amount of devices to be spawned. @@ -2292,10 +2279,18 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev, (list[ns].ifindex, &list[ns].info); } -#ifdef HAVE_MLX5DV_DR_DEVX_PORT if (!ret && bd >= 0) { switch (list[ns].info.name_type) { case MLX5_PHYS_PORT_NAME_TYPE_UPLINK: + if (np == 1) { + /* + * Force standalone bonding + * device for ROCE LAG + * confgiurations. + */ + list[ns].info.master = 0; + list[ns].info.representor = 0; + } if (list[ns].info.port_name == bd) ns++; break; @@ -2312,7 +2307,6 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev, } continue; } -#endif if (!ret && (list[ns].info.representor ^ list[ns].info.master)) ns++; -- 2.18.1