Hi, > -----Original Message----- > From: Viacheslav Ovsiienko <viachesl...@mellanox.com> > Sent: Tuesday, June 23, 2020 10:49 AM > To: dev@dpdk.org > Cc: Matan Azrad <ma...@mellanox.com>; Raslan Darawsheh > <rasl...@mellanox.com>; sta...@dpdk.org > Subject: [PATCH] net/mlx5: fix host physical function representor naming > > 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: sta...@dpdk.org > > Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> > --- > 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
Patch applied to next-net-mlx, Kindest regards, Raslan Darawsheh