Skip to content

Commit

Permalink
net: make drivers to use SET_NETDEV_DEVLINK_PORT to set devlink_port
Browse files Browse the repository at this point in the history
Benefit from the previously implemented tracking of netdev events in
devlink code and instead of calling  devlink_port_type_eth_set() and
devlink_port_type_clear() to set devlink port type and link to related
netdev, use SET_NETDEV_DEVLINK_PORT() macro to assign devlink_port
pointer to netdevice which is about to be registered.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
  • Loading branch information
Jiri Pirko committed Aug 26, 2022
1 parent b9ca8ce commit 95b77ce
Show file tree
Hide file tree
Showing 30 changed files with 39 additions and 158 deletions.
6 changes: 1 addition & 5 deletions drivers/net/ethernet/broadcom/bnxt/bnxt.c
Expand Up @@ -13122,9 +13122,6 @@ static void bnxt_remove_one(struct pci_dev *pdev)
if (BNXT_PF(bp))
bnxt_sriov_disable(bp);

if (BNXT_PF(bp))
devlink_port_type_clear(&bp->dl_port);

bnxt_ptp_clear(bp);
pci_disable_pcie_error_reporting(pdev);
unregister_netdev(dev);
Expand Down Expand Up @@ -13537,6 +13534,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENOMEM;

bp = netdev_priv(dev);
SET_NETDEV_DEVLINK_PORT(dev, &bp->dl_port);
bp->board_idx = ent->driver_data;
bp->msg_enable = BNXT_DEF_MSG_ENABLE;
bnxt_set_max_func_irqs(bp, max_irqs);
Expand Down Expand Up @@ -13712,8 +13710,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (rc)
goto init_err_cleanup;

if (BNXT_PF(bp))
devlink_port_type_eth_set(&bp->dl_port, bp->dev);
bnxt_dl_fw_reporters_create(bp);

bnxt_print_device_info(bp);
Expand Down
11 changes: 1 addition & 10 deletions drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
Expand Up @@ -226,25 +226,16 @@ int dpaa2_eth_dl_port_add(struct dpaa2_eth_priv *priv)
{
struct devlink_port *devlink_port = &priv->devlink_port;
struct devlink_port_attrs attrs = {};
int err;

attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
devlink_port_attrs_set(devlink_port, &attrs);

err = devlink_port_register(priv->devlink, devlink_port, 0);
if (err)
return err;

devlink_port_type_eth_set(devlink_port, priv->net_dev);

return 0;
return devlink_port_register(priv->devlink, devlink_port, 0);
}

void dpaa2_eth_dl_port_del(struct dpaa2_eth_priv *priv)
{
struct devlink_port *devlink_port = &priv->devlink_port;

devlink_port_type_clear(devlink_port);
devlink_port_unregister(devlink_port);
}

Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
Expand Up @@ -4602,6 +4602,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)

priv = netdev_priv(net_dev);
priv->net_dev = net_dev;
SET_NETDEV_DEVLINK_PORT(net_dev, &priv->devlink_port);

priv->iommu_domain = iommu_get_domain_for_dev(dev);

Expand Down
5 changes: 1 addition & 4 deletions drivers/net/ethernet/fungible/funeth/funeth_main.c
Expand Up @@ -1761,6 +1761,7 @@ static int fun_create_netdev(struct fun_ethdev *ed, unsigned int portid)
goto free_rss;

SET_NETDEV_DEV(netdev, fdev->dev);
SET_NETDEV_DEVLINK_PORT(netdev, &fp->dl_port);
netdev->netdev_ops = &fun_netdev_ops;

netdev->hw_features = NETIF_F_SG | NETIF_F_RXHASH | NETIF_F_RXCSUM;
Expand Down Expand Up @@ -1801,9 +1802,6 @@ static int fun_create_netdev(struct fun_ethdev *ed, unsigned int portid)
rc = register_netdev(netdev);
if (rc)
goto unreg_devlink;

devlink_port_type_eth_set(&fp->dl_port, netdev);

return 0;

unreg_devlink:
Expand All @@ -1828,7 +1826,6 @@ static void fun_destroy_netdev(struct net_device *netdev)
struct funeth_priv *fp;

fp = netdev_priv(netdev);
devlink_port_type_clear(&fp->dl_port);
unregister_netdev(netdev);
devlink_port_unregister(&fp->dl_port);
fun_ktls_cleanup(fp);
Expand Down
14 changes: 2 additions & 12 deletions drivers/net/ethernet/intel/ice/ice_devlink.c
Expand Up @@ -1033,12 +1033,7 @@ int ice_devlink_create_pf_port(struct ice_pf *pf)
*/
void ice_devlink_destroy_pf_port(struct ice_pf *pf)
{
struct devlink_port *devlink_port;

devlink_port = &pf->devlink_port;

devlink_port_type_clear(devlink_port);
devlink_port_unregister(devlink_port);
devlink_port_unregister(&pf->devlink_port);
}

/**
Expand Down Expand Up @@ -1094,12 +1089,7 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
*/
void ice_devlink_destroy_vf_port(struct ice_vf *vf)
{
struct devlink_port *devlink_port;

devlink_port = &vf->devlink_port;

devlink_port_type_clear(devlink_port);
devlink_port_unregister(devlink_port);
devlink_port_unregister(&vf->devlink_port);
}

#define ICE_DEVLINK_READ_BLK_SIZE (1024 * 1024)
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/ethernet/intel/ice/ice_main.c
Expand Up @@ -4560,6 +4560,7 @@ static int ice_register_netdev(struct ice_pf *pf)
if (err)
goto err_devlink_create;

SET_NETDEV_DEVLINK_PORT(vsi->netdev, &pf->devlink_port);
err = register_netdev(vsi->netdev);
if (err)
goto err_register_netdev;
Expand All @@ -4568,8 +4569,6 @@ static int ice_register_netdev(struct ice_pf *pf)
netif_carrier_off(vsi->netdev);
netif_tx_stop_all_queues(vsi->netdev);

devlink_port_type_eth_set(&pf->devlink_port, vsi->netdev);

return 0;
err_register_netdev:
ice_devlink_destroy_pf_port(pf);
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/ethernet/intel/ice/ice_repr.c
Expand Up @@ -339,12 +339,11 @@ static int ice_repr_add(struct ice_vf *vf)
repr->netdev->max_mtu = ICE_MAX_MTU;

SET_NETDEV_DEV(repr->netdev, ice_pf_to_dev(vf->pf));
SET_NETDEV_DEVLINK_PORT(repr->netdev, &vf->devlink_port);
err = ice_repr_reg_netdev(repr->netdev);
if (err)
goto err_netdev;

devlink_port_type_eth_set(&vf->devlink_port, repr->netdev);

ice_virtchnl_set_repr_ops(vf);

return 0;
Expand Down
10 changes: 0 additions & 10 deletions drivers/net/ethernet/marvell/prestera/prestera_devlink.c
Expand Up @@ -445,16 +445,6 @@ void prestera_devlink_port_unregister(struct prestera_port *port)
devlink_port_unregister(&port->dl_port);
}

void prestera_devlink_port_set(struct prestera_port *port)
{
devlink_port_type_eth_set(&port->dl_port, port->dev);
}

void prestera_devlink_port_clear(struct prestera_port *port)
{
devlink_port_type_clear(&port->dl_port);
}

struct devlink_port *prestera_devlink_get_port(struct net_device *dev)
{
struct prestera_port *port = netdev_priv(dev);
Expand Down
3 changes: 0 additions & 3 deletions drivers/net/ethernet/marvell/prestera/prestera_devlink.h
Expand Up @@ -15,9 +15,6 @@ void prestera_devlink_unregister(struct prestera_switch *sw);
int prestera_devlink_port_register(struct prestera_port *port);
void prestera_devlink_port_unregister(struct prestera_port *port);

void prestera_devlink_port_set(struct prestera_port *port);
void prestera_devlink_port_clear(struct prestera_port *port);

struct devlink_port *prestera_devlink_get_port(struct net_device *dev);

void prestera_devlink_trap_report(struct prestera_port *port,
Expand Down
4 changes: 1 addition & 3 deletions drivers/net/ethernet/marvell/prestera/prestera_main.c
Expand Up @@ -631,6 +631,7 @@ static int prestera_port_create(struct prestera_switch *sw, u32 id)
dev->netdev_ops = &prestera_netdev_ops;
dev->ethtool_ops = &prestera_ethtool_ops;
SET_NETDEV_DEV(dev, sw->dev->dev);
SET_NETDEV_DEVLINK_PORT(dev, &port->dl_port);

if (port->caps.transceiver != PRESTERA_PORT_TCVR_SFP)
netif_carrier_off(dev);
Expand Down Expand Up @@ -724,8 +725,6 @@ static int prestera_port_create(struct prestera_switch *sw, u32 id)
if (err)
goto err_register_netdev;

prestera_devlink_port_set(port);

err = prestera_port_sfp_bind(port);
if (err)
goto err_sfp_bind;
Expand All @@ -748,7 +747,6 @@ static void prestera_port_destroy(struct prestera_port *port)
struct net_device *dev = port->dev;

cancel_delayed_work_sync(&port->cached_hw_stats.caching_dw);
prestera_devlink_port_clear(port);
unregister_netdev(dev);
prestera_port_list_del(port);
prestera_devlink_port_unregister(port);
Expand Down
9 changes: 3 additions & 6 deletions drivers/net/ethernet/mellanox/mlx4/en_netdev.c
Expand Up @@ -2337,11 +2337,8 @@ void mlx4_en_destroy_netdev(struct net_device *dev)
en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port);

/* Unregister device - this will close the port if it was up */
if (priv->registered) {
devlink_port_type_clear(mlx4_get_devlink_port(mdev->dev,
priv->port));
if (priv->registered)
unregister_netdev(dev);
}

if (priv->allocated)
mlx4_free_hwq_res(mdev->dev, &priv->res, MLX4_EN_PAGE_SIZE);
Expand Down Expand Up @@ -3474,15 +3471,15 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
mdev->profile.prof[priv->port].tx_ppp,
mdev->profile.prof[priv->port].tx_pause);

SET_NETDEV_DEVLINK_PORT(dev,
mlx4_get_devlink_port(mdev->dev, priv->port));
err = register_netdev(dev);
if (err) {
en_err(priv, "Netdev registration failed for port %d\n", port);
goto out;
}

priv->registered = 1;
devlink_port_type_eth_set(mlx4_get_devlink_port(mdev->dev, priv->port),
dev);

return 0;

Expand Down
7 changes: 0 additions & 7 deletions drivers/net/ethernet/mellanox/mlx5/core/en/devlink.c
Expand Up @@ -51,13 +51,6 @@ int mlx5e_devlink_port_register(struct mlx5e_priv *priv)
return ret;
}

void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv)
{
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);

devlink_port_type_eth_set(dl_port, priv->netdev);
}

void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv)
{
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);
Expand Down
1 change: 0 additions & 1 deletion drivers/net/ethernet/mellanox/mlx5/core/en/devlink.h
Expand Up @@ -9,7 +9,6 @@

int mlx5e_devlink_port_register(struct mlx5e_priv *priv);
void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv);
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv);
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev);

static inline struct devlink_port *
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/ethernet/mellanox/mlx5/core/en_main.c
Expand Up @@ -5760,14 +5760,13 @@ static int mlx5e_probe(struct auxiliary_device *adev,
goto err_profile_cleanup;
}

SET_NETDEV_DEVLINK_PORT(netdev, mlx5e_devlink_get_dl_port(priv));
err = register_netdev(netdev);
if (err) {
mlx5_core_err(mdev, "register_netdev failed, %d\n", err);
goto err_resume;
}

mlx5e_devlink_port_type_eth_set(priv);

mlx5e_dcbnl_init_app(priv);
mlx5_uplink_netdev_set(mdev, netdev);
return 0;
Expand Down
31 changes: 6 additions & 25 deletions drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
Expand Up @@ -1260,37 +1260,22 @@ mlx5e_vport_uplink_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *
{
struct mlx5e_priv *priv = netdev_priv(mlx5_uplink_netdev_get(dev));
struct mlx5e_rep_priv *rpriv = mlx5e_rep_to_rep_priv(rep);
struct devlink_port *dl_port;
int err;

rpriv->netdev = priv->netdev;

err = mlx5e_netdev_change_profile(priv, &mlx5e_uplink_rep_profile,
rpriv);
if (err)
return err;

dl_port = mlx5_esw_offloads_devlink_port(dev->priv.eswitch, rpriv->rep->vport);
if (dl_port)
devlink_port_type_eth_set(dl_port, rpriv->netdev);

return 0;
return mlx5e_netdev_change_profile(priv, &mlx5e_uplink_rep_profile,
rpriv);
}

static void
mlx5e_vport_uplink_rep_unload(struct mlx5e_rep_priv *rpriv)
{
struct net_device *netdev = rpriv->netdev;
struct devlink_port *dl_port;
struct mlx5_core_dev *dev;
struct mlx5e_priv *priv;

priv = netdev_priv(netdev);
dev = priv->mdev;

dl_port = mlx5_esw_offloads_devlink_port(dev->priv.eswitch, rpriv->rep->vport);
if (dl_port)
devlink_port_type_clear(dl_port);
mlx5e_netdev_attach_nic_profile(priv);
}

Expand Down Expand Up @@ -1333,6 +1318,10 @@ mlx5e_vport_vf_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
goto err_cleanup_profile;
}

dl_port = mlx5_esw_offloads_devlink_port(dev->priv.eswitch, rpriv->rep->vport);
if (dl_port)
SET_NETDEV_DEVLINK_PORT(netdev, dl_port);

err = register_netdev(netdev);
if (err) {
netdev_warn(netdev,
Expand All @@ -1341,9 +1330,6 @@ mlx5e_vport_vf_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
goto err_detach_netdev;
}

dl_port = mlx5_esw_offloads_devlink_port(dev->priv.eswitch, rpriv->rep->vport);
if (dl_port)
devlink_port_type_eth_set(dl_port, netdev);
return 0;

err_detach_netdev:
Expand Down Expand Up @@ -1389,18 +1375,13 @@ mlx5e_vport_rep_unload(struct mlx5_eswitch_rep *rep)
struct mlx5e_rep_priv *rpriv = mlx5e_rep_to_rep_priv(rep);
struct net_device *netdev = rpriv->netdev;
struct mlx5e_priv *priv = netdev_priv(netdev);
struct mlx5_core_dev *dev = priv->mdev;
struct devlink_port *dl_port;
void *ppriv = priv->ppriv;

if (rep->vport == MLX5_VPORT_UPLINK) {
mlx5e_vport_uplink_rep_unload(rpriv);
goto free_ppriv;
}

dl_port = mlx5_esw_offloads_devlink_port(dev->priv.eswitch, rpriv->rep->vport);
if (dl_port)
devlink_port_type_clear(dl_port);
unregister_netdev(netdev);
mlx5e_detach_netdev(priv);
priv->profile->cleanup(priv);
Expand Down
20 changes: 4 additions & 16 deletions drivers/net/ethernet/mellanox/mlxsw/core.c
Expand Up @@ -3155,29 +3155,17 @@ void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core)
}
EXPORT_SYMBOL(mlxsw_core_cpu_port_fini);

void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv, struct net_device *dev)
void mlxsw_core_port_netdev_link(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv, struct net_device *dev)
{
struct mlxsw_core_port *mlxsw_core_port =
&mlxsw_core->ports[local_port];
struct devlink_port *devlink_port = &mlxsw_core_port->devlink_port;

mlxsw_core_port->port_driver_priv = port_driver_priv;
devlink_port_type_eth_set(devlink_port, dev);
SET_NETDEV_DEVLINK_PORT(dev, devlink_port);
}
EXPORT_SYMBOL(mlxsw_core_port_eth_set);

void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv)
{
struct mlxsw_core_port *mlxsw_core_port =
&mlxsw_core->ports[local_port];
struct devlink_port *devlink_port = &mlxsw_core_port->devlink_port;

mlxsw_core_port->port_driver_priv = port_driver_priv;
devlink_port_type_clear(devlink_port);
}
EXPORT_SYMBOL(mlxsw_core_port_clear);
EXPORT_SYMBOL(mlxsw_core_port_netdev_link);

struct devlink_port *
mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core,
Expand Down
6 changes: 2 additions & 4 deletions drivers/net/ethernet/mellanox/mlxsw/core.h
Expand Up @@ -262,10 +262,8 @@ int mlxsw_core_cpu_port_init(struct mlxsw_core *mlxsw_core,
const unsigned char *switch_id,
unsigned char switch_id_len);
void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core);
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv, struct net_device *dev);
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv);
void mlxsw_core_port_netdev_link(struct mlxsw_core *mlxsw_core, u16 local_port,
void *port_driver_priv, struct net_device *dev);
struct devlink_port *
mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core,
u16 local_port);
Expand Down

0 comments on commit 95b77ce

Please sign in to comment.