From: Viacheslav Ovsiienko Date: Wed, 8 Jul 2020 20:52:16 +0000 (+0000) Subject: common/mlx5: fix physical port name pattern recognition X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=3590881b37736cfe26e2cb7dcd37c93b1532a0de;p=dpdk.git common/mlx5: fix physical port name pattern recognition 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 --- diff --git a/drivers/common/mlx5/linux/mlx5_common_os.c b/drivers/common/mlx5/linux/mlx5_common_os.c index e74aa89cc5..7bb3ba6f82 100644 --- a/drivers/common/mlx5/linux/mlx5_common_os.c +++ b/drivers/common/mlx5/linux/mlx5_common_os.c @@ -89,7 +89,7 @@ void 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 @@ mlx5_translate_port_name(const char *port_name_in, * 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 @@ mlx5_translate_port_name(const char *port_name_in, * 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 @@ mlx5_translate_port_name(const char *port_name_in, * 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;