From: "Xueming(Steven) Li" <xuemingl@nvidia.com>
To: Slava Ovsiienko <viacheslavo@nvidia.com>,
"stable@dpdk.org" <stable@dpdk.org>
Cc: "ktraynor@redhat.com" <ktraynor@redhat.com>,
"bluca@debian.org" <bluca@debian.org>
Subject: Re: [dpdk-stable] [PATCH v2][20.11] common/mlx5: fix physical port name recognition
Date: Wed, 3 Nov 2021 11:09:47 +0000 [thread overview]
Message-ID: <cbf78cfe8ac7f6f4c23224e4bb5bf1e975782352.camel@nvidia.com> (raw)
In-Reply-To: <20211103091836.27743-1-viacheslavo@nvidia.com>
On Wed, 2021-11-03 at 11:18 +0200, Viacheslav Ovsiienko wrote:
> From: Xueming Li <xuemingl@nvidia.com>
>
> [ upstream commit 59df97f1a832a0edfd7f77ffbe5149e553e860b5 ]
>
> While device probing mlx5 PMD get the physical port name
> and checks against the set of patterns. If there is no
> any pattern match, the driver assumes the port belongs
> to PF device, this behaviour provides compatibility with
> legacy kernel drivers (before and early SR-IOV support).
>
> The newer kernels added the PCI subfunction support and
> representor names with pattern like pf0sf1. This pattern
> was not recognized by PMD and the first found subfunction
> representor was considered as master device.
>
> This patch supports representor name parsing for SF,
> and SF representors are just ignored by PMD (as there is
> no support for SF in 20.11-LTS release).
>
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
> ---
> drivers/common/mlx5/linux/mlx5_common_os.c | 32 +++++++++++++++-------
> drivers/common/mlx5/linux/mlx5_nl.c | 3 ++
> drivers/common/mlx5/mlx5_common.h | 2 ++
> drivers/net/mlx5/linux/mlx5_ethdev_os.c | 3 ++
> 4 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/common/mlx5/linux/mlx5_common_os.c b/drivers/common/mlx5/linux/mlx5_common_os.c
> index 0edd78ea6d..5cf9576921 100644
> --- a/drivers/common/mlx5/linux/mlx5_common_os.c
> +++ b/drivers/common/mlx5/linux/mlx5_common_os.c
> @@ -97,22 +97,34 @@ 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, eol;
> + char ctrl = 0, pf_c1, pf_c2, vf_c1, vf_c2, eol;
> char *end;
> int sc_items;
>
> - /*
> - * 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%d",
> + &ctrl, &port_info_out->ctrl_num);
> + if (sc_items == 2 && ctrl == 'c') {
> + port_name_in++; /* 'c' */
> + port_name_in += snprintf(NULL, 0, "%d",
> + port_info_out->ctrl_num);
> + }
> + /* Check for port-name as a string of the form pf0vf0 or pf0sf0 */
> 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, &eol);
> - if (sc_items == 6 &&
> - pf_c1 == 'p' && pf_c2 == 'f' &&
> - vf_c1 == 'v' && vf_c2 == 'f') {
> - port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_PFVF;
> - return;
> + if (sc_items == 6 && pf_c1 == 'p' && pf_c2 == 'f') {
> + if (vf_c1 == 'v' && vf_c2 == 'f') {
> + /* Kernel ver >= 5.0 or OFED ver >= 4.6 */
> + port_info_out->name_type =
> + MLX5_PHYS_PORT_NAME_TYPE_PFVF;
> + return;
> + }
> + if (vf_c1 == 's' && vf_c2 == 'f') {
> + /* Kernel ver >= 5.11 or OFED ver >= 5.1 */
> + port_info_out->name_type =
> + MLX5_PHYS_PORT_NAME_TYPE_PFSF;
> + return;
> + }
> }
> /*
> * Check for port-name as a string of the form p0
> diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c
> index 1f765dca07..145e354b2c 100644
> --- a/drivers/common/mlx5/linux/mlx5_nl.c
> +++ b/drivers/common/mlx5/linux/mlx5_nl.c
> @@ -789,6 +789,7 @@ mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
> int i;
> int ret;
>
> + memset(macs, 0, n * sizeof(macs[0]));
> ret = mlx5_nl_mac_addr_list(nlsk_fd, iface_idx, &macs, &macs_n);
> if (ret)
> return;
> @@ -1201,6 +1202,8 @@ mlx5_nl_check_switch_info(bool num_vf_set,
> case MLX5_PHYS_PORT_NAME_TYPE_PFHPF:
> /* Fallthrough */
> case MLX5_PHYS_PORT_NAME_TYPE_PFVF:
> + /* Fallthrough */
> + case MLX5_PHYS_PORT_NAME_TYPE_PFSF:
> /* New representors naming schema. */
> switch_info->representor = 1;
> break;
> diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h
> index a484b74b9c..4c75addd08 100644
> --- a/drivers/common/mlx5/mlx5_common.h
> +++ b/drivers/common/mlx5/mlx5_common.h
> @@ -153,6 +153,7 @@ enum mlx5_nl_phys_port_name_type {
> 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_PFSF, /* pf0sf0, kernel ver >= 5.0 */
> MLX5_PHYS_PORT_NAME_TYPE_UNKNOWN, /* Unrecognized. */
> };
>
> @@ -161,6 +162,7 @@ struct mlx5_switch_info {
> uint32_t master:1; /**< Master device. */
> uint32_t representor:1; /**< Representor device. */
> enum mlx5_nl_phys_port_name_type name_type; /** < Port name type. */
> + int32_t ctrl_num; /**< Controller number (valid for c#pf#vf# format). */
> int32_t pf_num; /**< PF number (valid for pfxvfx format only). */
> int32_t port_name; /**< Representor port name. */
> uint64_t switch_id; /**< Switch identifier. */
> diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
> index f641cb936e..08b51b7dc8 100644
> --- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
> +++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
> @@ -1013,6 +1013,9 @@ mlx5_sysfs_check_switch_info(bool device_dir,
> /* New representors naming schema. */
> switch_info->representor = 1;
> break;
> + default:
> + switch_info->master = device_dir;
> + break;
> }
> }
>
Thanks for upate! add LTS version to subject.
next prev parent reply other threads:[~2021-11-03 11:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-25 10:38 [dpdk-stable] [PATCH] common/mlx5: fix sub-function representor parsing Viacheslav Ovsiienko
2021-11-03 9:18 ` [dpdk-stable] [PATCH v2] common/mlx5: fix physical port name recognition Viacheslav Ovsiienko
2021-11-03 11:09 ` Xueming(Steven) Li [this message]
2021-11-08 11:09 ` Xueming(Steven) Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cbf78cfe8ac7f6f4c23224e4bb5bf1e975782352.camel@nvidia.com \
--to=xuemingl@nvidia.com \
--cc=bluca@debian.org \
--cc=ktraynor@redhat.com \
--cc=stable@dpdk.org \
--cc=viacheslavo@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).