From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BCDF9A0519 for ; Tue, 23 Jun 2020 09:48:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9C2ED1D57F; Tue, 23 Jun 2020 09:48:41 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 25E591D575 for ; Tue, 23 Jun 2020 09:48:38 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from viacheslavo@mellanox.com) with SMTP; 23 Jun 2020 10:48:37 +0300 Received: from pegasus12.mtr.labs.mlnx (pegasus12.mtr.labs.mlnx [10.210.17.40]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 05N7mbMd004887; Tue, 23 Jun 2020 10:48:37 +0300 Received: from pegasus12.mtr.labs.mlnx (localhost [127.0.0.1]) by pegasus12.mtr.labs.mlnx (8.14.7/8.14.7) with ESMTP id 05N7mbZm015463; Tue, 23 Jun 2020 07:48:37 GMT Received: (from viacheslavo@localhost) by pegasus12.mtr.labs.mlnx (8.14.7/8.14.7/Submit) id 05N7ma2m015462; Tue, 23 Jun 2020 07:48:36 GMT X-Authentication-Warning: pegasus12.mtr.labs.mlnx: viacheslavo set sender to viacheslavo@mellanox.com using -f From: Viacheslav Ovsiienko To: dev@dpdk.org Cc: matan@mellanox.com, rasland@mellanox.com, stable@dpdk.org Date: Tue, 23 Jun 2020 07:48:34 +0000 Message-Id: <1592898514-15422-1-git-send-email-viacheslavo@mellanox.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-stable] [PATCH] net/mlx5: fix host physical function representor naming X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" The new kernel adds the names like "pf0" for Host PCI physical function representor on Bluefield SmartNIC hosts. This patch provides correct HPF representor recognition over the kernel versions 5.7 and laters. The following port naming formats are supported: - missing physical port name (no sysfs/netlink key) at all, master is assumed - decimal digits (for example "12"), representor is assumed, the value is the index of attached VF - "p" followed by decimal digits, for example "p2", master is assumed - "pf" followed by PF index, for example "pf0", Host PF representor is assumed on SmartNIC systems. - "pf" followed by PF index concatenated with "vf" followed by VF index, for example "pf0vf1", representor is assumed. If index of VF is "-1" it is a special case of Host PF representor, this representor must be indexed in devargs as 65535, for example representor=[0-3,65535] will allow representors for VF0, VF1, VF2, VF3 and for host PF. Fixes: 79aa430721b1 ("common/mlx5: split common file under Linux directory") Cc: stable@dpdk.org Signed-off-by: Viacheslav Ovsiienko --- drivers/common/mlx5/linux/mlx5_common_os.c | 11 +++++++++++ drivers/common/mlx5/linux/mlx5_nl.c | 2 ++ drivers/common/mlx5/mlx5_common.h | 1 + drivers/net/mlx5/linux/mlx5_ethdev_os.c | 2 ++ drivers/net/mlx5/linux/mlx5_os.c | 2 ++ 5 files changed, 18 insertions(+) diff --git a/drivers/common/mlx5/linux/mlx5_common_os.c b/drivers/common/mlx5/linux/mlx5_common_os.c index 4e04d70..08e8ebb 100644 --- a/drivers/common/mlx5/linux/mlx5_common_os.c +++ b/drivers/common/mlx5/linux/mlx5_common_os.c @@ -114,6 +114,17 @@ port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_UPLINK; return; } + /* + * Check for port-name as a string of the form pf0 + * (support kernel ver >= 5.7 for HPF representor on BF). + */ + sc_items = sscanf(port_name_in, "%c%c%d", + &pf_c1, &pf_c2, &port_info_out->pf_num); + if (sc_items == 3 && pf_c1 == 'p' && pf_c2 == 'f') { + port_info_out->port_name = -1; + port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_PFHPF; + return; + } /* Check for port-name as a number (support kernel ver < 5.0 */ errno = 0; port_info_out->port_name = strtol(port_name_in, &end, 0); diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c index 2943704..dc504d8 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.c +++ b/drivers/common/mlx5/linux/mlx5_nl.c @@ -1145,6 +1145,8 @@ struct mlx5_nl_ifindex_data { /* Legacy representors naming schema. */ switch_info->representor = !num_vf_set; break; + case MLX5_PHYS_PORT_NAME_TYPE_PFHPF: + /* Fallthrough */ case MLX5_PHYS_PORT_NAME_TYPE_PFVF: /* New representors naming schema. */ switch_info->representor = 1; diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h index 8e679c6..6b19399 100644 --- a/drivers/common/mlx5/mlx5_common.h +++ b/drivers/common/mlx5/mlx5_common.h @@ -145,6 +145,7 @@ enum mlx5_nl_phys_port_name_type { MLX5_PHYS_PORT_NAME_TYPE_LEGACY, /* before kernel ver < 5.0 */ MLX5_PHYS_PORT_NAME_TYPE_UPLINK, /* p0, kernel ver >= 5.0 */ MLX5_PHYS_PORT_NAME_TYPE_PFVF, /* pf0vf0, kernel ver >= 5.0 */ + MLX5_PHYS_PORT_NAME_TYPE_PFHPF, /* pf0, kernel ver >= 5.7, HPF rep */ MLX5_PHYS_PORT_NAME_TYPE_UNKNOWN, /* Unrecognized. */ }; diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c index ab47cb5..c582051 100644 --- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c +++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c @@ -1176,6 +1176,8 @@ struct ethtool_link_settings { /* Legacy representors naming schema. */ switch_info->representor = !device_dir; break; + case MLX5_PHYS_PORT_NAME_TYPE_PFHPF: + /* Fallthrough */ case MLX5_PHYS_PORT_NAME_TYPE_PFVF: /* New representors naming schema. */ switch_info->representor = 1; diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 0e12b10..1271b42 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1563,6 +1563,8 @@ if (list[ns].info.port_name == bd) ns++; break; + case MLX5_PHYS_PORT_NAME_TYPE_PFHPF: + /* Fallthrough */ case MLX5_PHYS_PORT_NAME_TYPE_PFVF: if (list[ns].info.pf_num == bd) ns++; -- 1.8.3.1