| From foo@baz Sat 18 Apr 2020 11:09:57 AM CEST |
| From: Parav Pandit <parav@mellanox.com> |
| Date: Fri, 3 Apr 2020 03:57:30 -0500 |
| Subject: net/mlx5e: Fix pfnum in devlink port attribute |
| |
| From: Parav Pandit <parav@mellanox.com> |
| |
| [ Upstream commit 7482d9cb5b974b7ad1a58fa8714f7a8c05b5d278 ] |
| |
| Cited patch missed to extract PCI pf number accurately for PF and VF |
| port flavour. It considered PCI device + function number. |
| Due to this, device having non zero device number shown large pfnum. |
| |
| Hence, use only PCI function number; to avoid similar errors, derive |
| pfnum one time for all port flavours. |
| |
| Fixes: f60f315d339e ("net/mlx5e: Register devlink ports for physical link, PCI PF, VFs") |
| Reviewed-by: Jiri Pirko <jiri@mellanox.com> |
| Signed-off-by: Parav Pandit <parav@mellanox.com> |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c |
| @@ -1814,29 +1814,30 @@ static int register_devlink_port(struct |
| struct mlx5_eswitch_rep *rep = rpriv->rep; |
| struct netdev_phys_item_id ppid = {}; |
| unsigned int dl_port_index = 0; |
| + u16 pfnum; |
| |
| if (!is_devlink_port_supported(dev, rpriv)) |
| return 0; |
| |
| mlx5e_rep_get_port_parent_id(rpriv->netdev, &ppid); |
| + pfnum = PCI_FUNC(dev->pdev->devfn); |
| |
| if (rep->vport == MLX5_VPORT_UPLINK) { |
| devlink_port_attrs_set(&rpriv->dl_port, |
| DEVLINK_PORT_FLAVOUR_PHYSICAL, |
| - PCI_FUNC(dev->pdev->devfn), false, 0, |
| + pfnum, false, 0, |
| &ppid.id[0], ppid.id_len); |
| dl_port_index = vport_to_devlink_port_index(dev, rep->vport); |
| } else if (rep->vport == MLX5_VPORT_PF) { |
| devlink_port_attrs_pci_pf_set(&rpriv->dl_port, |
| &ppid.id[0], ppid.id_len, |
| - dev->pdev->devfn); |
| + pfnum); |
| dl_port_index = rep->vport; |
| } else if (mlx5_eswitch_is_vf_vport(dev->priv.eswitch, |
| rpriv->rep->vport)) { |
| devlink_port_attrs_pci_vf_set(&rpriv->dl_port, |
| &ppid.id[0], ppid.id_len, |
| - dev->pdev->devfn, |
| - rep->vport - 1); |
| + pfnum, rep->vport - 1); |
| dl_port_index = vport_to_devlink_port_index(dev, rep->vport); |
| } |
| |