From patchwork Wed Jul 8 20:52:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Slava Ovsiienko X-Patchwork-Id: 73548 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B9A24A0526; Wed, 8 Jul 2020 22:52:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 38F851DE7B; Wed, 8 Jul 2020 22:52:21 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id A44B61DE1F for ; Wed, 8 Jul 2020 22:52:19 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from viacheslavo@mellanox.com) with SMTP; 8 Jul 2020 23:52:18 +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 068KqI0n007649; Wed, 8 Jul 2020 23:52:18 +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 068KqIjw005342; Wed, 8 Jul 2020 20:52:18 GMT Received: (from viacheslavo@localhost) by pegasus12.mtr.labs.mlnx (8.14.7/8.14.7/Submit) id 068KqIcq005341; Wed, 8 Jul 2020 20:52:18 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: Wed, 8 Jul 2020 20:52:16 +0000 Message-Id: <1594241536-5300-1-git-send-email-viacheslavo@mellanox.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-dev] [PATCH] common/mlx5: fix physical port name pattern recognition X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch makes the Infiniband device physical port name recognition more strict. Currently mlx5 PMD might recognize the names like "pf0sf0" erroneously as "pf0" and the wrong device type (host PF representor) is reported. The names like "pf0sf0" belong to PCI subfunctions which is currently not supported by mlx5 PMD and this false recognition must be eliminated. Fixes: 420bbdae89f2 ("net/mlx5: fix host physical function representor naming") Cc: stable@dpdk.org Signed-off-by: Viacheslav Ovsiienko --- drivers/common/mlx5/linux/mlx5_common_os.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/common/mlx5/linux/mlx5_common_os.c b/drivers/common/mlx5/linux/mlx5_common_os.c index e74aa89..7bb3ba6 100644 --- a/drivers/common/mlx5/linux/mlx5_common_os.c +++ b/drivers/common/mlx5/linux/mlx5_common_os.c @@ -89,7 +89,7 @@ mlx5_translate_port_name(const char *port_name_in, struct mlx5_switch_info *port_info_out) { - char pf_c1, pf_c2, vf_c1, vf_c2; + char pf_c1, pf_c2, vf_c1, vf_c2, eol; char *end; int sc_items; @@ -97,9 +97,9 @@ * Check for port-name as a string of the form pf0vf0 * (support kernel ver >= 5.0 or OFED ver >= 4.6). */ - sc_items = sscanf(port_name_in, "%c%c%d%c%c%d", + sc_items = sscanf(port_name_in, "%c%c%d%c%c%d%c", &pf_c1, &pf_c2, &port_info_out->pf_num, - &vf_c1, &vf_c2, &port_info_out->port_name); + &vf_c1, &vf_c2, &port_info_out->port_name, &eol); if (sc_items == 6 && pf_c1 == 'p' && pf_c2 == 'f' && vf_c1 == 'v' && vf_c2 == 'f') { @@ -110,8 +110,8 @@ * Check for port-name as a string of the form p0 * (support kernel ver >= 5.0, or OFED ver >= 4.6). */ - sc_items = sscanf(port_name_in, "%c%d", - &pf_c1, &port_info_out->port_name); + sc_items = sscanf(port_name_in, "%c%d%c", + &pf_c1, &port_info_out->port_name, &eol); if (sc_items == 2 && pf_c1 == 'p') { port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_UPLINK; return; @@ -120,8 +120,8 @@ * 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); + sc_items = sscanf(port_name_in, "%c%c%d%c", + &pf_c1, &pf_c2, &port_info_out->pf_num, &eol); 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;