net: make drivers to use SET_NETDEV_DEVLINK_PORT to set devlink_port
authorJiri Pirko <jiri@nvidia.com>
Wed, 2 Nov 2022 16:02:04 +0000 (17:02 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 4 Nov 2022 03:48:34 +0000 (20:48 -0700)
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>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
30 files changed:
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/fungible/funeth/funeth_main.c
drivers/net/ethernet/intel/ice/ice_devlink.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/ice/ice_repr.c
drivers/net/ethernet/marvell/prestera/prestera_devlink.c
drivers/net/ethernet/marvell/prestera/prestera_devlink.h
drivers/net/ethernet/marvell/prestera/prestera_main.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx5/core/en/devlink.c
drivers/net/ethernet/mellanox/mlx5/core/en/devlink.h
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/mellanox/mlxsw/core.h
drivers/net/ethernet/mellanox/mlxsw/minimal.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mscc/ocelot_net.c
drivers/net/ethernet/mscc/ocelot_vsc7514.c
drivers/net/ethernet/netronome/nfp/nfp_devlink.c
drivers/net/ethernet/netronome/nfp/nfp_net_main.c
drivers/net/ethernet/netronome/nfp/nfp_port.h
drivers/net/ethernet/pensando/ionic/ionic_devlink.c
drivers/net/ethernet/ti/am65-cpsw-nuss.c
drivers/net/netdevsim/dev.c
drivers/net/netdevsim/netdev.c
net/dsa/dsa2.c
net/dsa/slave.c

index 04cf7684f1b0c2630c5984b1f7e9f4d78110aa8e..9604294b67aa67147578690142977a2c18e0e3f8 100644 (file)
@@ -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);
@@ -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);
@@ -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);
index 7fefe1574b6a0202cbdfb8ffb7c81f4fdba7db71..5c6dd3029e2f7d71c13fac759aede9b98dbd0ee8 100644 (file)
@@ -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);
 }
 
index 892a1403c469f0cbddebfe03c99b5cf011c08dfc..273f1d77c012dd2f3c81f1df75bb2b3af8696bbc 100644 (file)
@@ -4791,6 +4791,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);
 
index 095f51c4d9d94b676923838318d0f37ba7c74766..208dc89f4972c2c8935f0e3c8326b2bc6dbf9c27 100644 (file)
@@ -1760,6 +1760,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;
@@ -1800,9 +1801,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:
@@ -1827,7 +1825,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);
index e6ec20079ced96910b049cbb91da5480f419f914..455489e9457d9e6695ef6cb6b806d43a0d80ba2e 100644 (file)
@@ -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);
 }
 
 /**
@@ -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)
index 1f27dc20b4f1fb4f5b3277fc1437915a59b4081b..74d25fda11bdf4053c306257aa76334d22777f1c 100644 (file)
@@ -4603,6 +4603,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;
@@ -4611,8 +4612,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);
index bd31748aae1b43b44da3de825a35f7124e22d21c..663a7a0e1814cc19397f412c637bdf7bcda340a7 100644 (file)
@@ -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;
index 06279cd6da6746e3333fc1928ba0ab67517d5968..637b8fee65e74c6658d8d8bd1280c99529ea01a0 100644 (file)
@@ -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);
index b322295bad3ad37a03d5267c84e7eb621b3faec1..04e8556f748a4b83da2e7a224a0b0587a6b7c20b 100644 (file)
@@ -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,
index 24f9d60247453107f79f425e1918928d27a92568..a76bf3606aa619f515ea40e3f8dc38df197eca7c 100644 (file)
@@ -644,6 +644,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);
@@ -737,8 +738,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;
@@ -761,7 +760,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);
index ca4b93a0103469b9629dad2f877a496c23fd727c..8800d3f1f55ca9542b9aa9c623f4e5aae0fcbcb5 100644 (file)
@@ -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);
@@ -3474,6 +3471,8 @@ 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);
@@ -3481,8 +3480,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
        }
 
        priv->registered = 1;
-       devlink_port_type_eth_set(mlx4_get_devlink_port(mdev->dev, priv->port),
-                                 dev);
 
        return 0;
 
index b69f9d10ccbdbce35b0b361b0c3a8f66878c10e0..ce0e56f856d6c16bc8dfd723576e0b62086935ff 100644 (file)
@@ -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);
index 10b50feb9883fe889d58ae7a4c59a7171ca8de09..1c203257ac306fc29a32036ad8ad10e244e94264 100644 (file)
@@ -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 *
index 364f04309149225b3a8795d315cd619fb838b62b..97e876472a06c5ffa5d0b37bc9bcc1c11ee988ef 100644 (file)
@@ -5932,14 +5932,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;
index 794cd8dfe9c911f7c6480c877cb81bc6beac96fa..5412633b9c8c8a1d287a2b68a7c4cabaa9b5a07a 100644 (file)
@@ -1253,37 +1253,20 @@ 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);
 }
 
@@ -1326,6 +1309,11 @@ 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,
@@ -1334,9 +1322,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:
@@ -1382,8 +1367,6 @@ 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) {
@@ -1391,9 +1374,6 @@ mlx5e_vport_rep_unload(struct mlx5_eswitch_rep *rep)
                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);
index e2a985ec2c765a36269d20ca60c3b186fa87c30d..a83f6bc30072975c7be35456db1433f7f16c863f 100644 (file)
@@ -3172,29 +3172,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,
index ca0c3d2bee6b31e247997557a138477c662dab94..e0a6fcbbcb1958478c0128cb0590d139da9d95ff 100644 (file)
@@ -264,10 +264,9 @@ 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);
index 55b3c42bb007199b63ee3c9b282156a55b5e46a2..177cf7e4db34c970d8c1f16e3121d724c9a884a1 100644 (file)
@@ -265,6 +265,8 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u16 local_port, u8 slot_index,
        SET_NETDEV_DEV(dev, mlxsw_m->bus_info->dev);
        dev_net_set(dev, mlxsw_core_net(mlxsw_m->core));
        mlxsw_m_port = netdev_priv(dev);
+       mlxsw_core_port_netdev_link(mlxsw_m->core, local_port,
+                                   mlxsw_m_port, dev);
        mlxsw_m_port->dev = dev;
        mlxsw_m_port->mlxsw_m = mlxsw_m;
        mlxsw_m_port->local_port = local_port;
@@ -298,9 +300,6 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u16 local_port, u8 slot_index,
                goto err_register_netdev;
        }
 
-       mlxsw_core_port_eth_set(mlxsw_m->core, mlxsw_m_port->local_port,
-                               mlxsw_m_port, dev);
-
        return 0;
 
 err_register_netdev:
@@ -316,7 +315,6 @@ static void mlxsw_m_port_remove(struct mlxsw_m *mlxsw_m, u16 local_port)
 {
        struct mlxsw_m_port *mlxsw_m_port = mlxsw_m->ports[local_port];
 
-       mlxsw_core_port_clear(mlxsw_m->core, local_port, mlxsw_m);
        unregister_netdev(mlxsw_m_port->dev); /* This calls ndo_stop */
        mlxsw_m->ports[local_port] = NULL;
        free_netdev(mlxsw_m_port->dev);
index 6ed496f6cbfb21d1efea23133c687b2e28c69180..b13739e1f8f3079183bf48d3f871693f9b4320cf 100644 (file)
@@ -1651,6 +1651,8 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u16 local_port,
        SET_NETDEV_DEV(dev, mlxsw_sp->bus_info->dev);
        dev_net_set(dev, mlxsw_sp_net(mlxsw_sp));
        mlxsw_sp_port = netdev_priv(dev);
+       mlxsw_core_port_netdev_link(mlxsw_sp->core, local_port,
+                                   mlxsw_sp_port, dev);
        mlxsw_sp_port->dev = dev;
        mlxsw_sp_port->mlxsw_sp = mlxsw_sp;
        mlxsw_sp_port->local_port = local_port;
@@ -1839,8 +1841,6 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u16 local_port,
                goto err_register_netdev;
        }
 
-       mlxsw_core_port_eth_set(mlxsw_sp->core, mlxsw_sp_port->local_port,
-                               mlxsw_sp_port, dev);
        mlxsw_core_schedule_dw(&mlxsw_sp_port->periodic_hw_stats.update_dw, 0);
        return 0;
 
@@ -1897,7 +1897,6 @@ static void mlxsw_sp_port_remove(struct mlxsw_sp *mlxsw_sp, u16 local_port)
 
        cancel_delayed_work_sync(&mlxsw_sp_port->periodic_hw_stats.update_dw);
        cancel_delayed_work_sync(&mlxsw_sp_port->ptp.shaper_dw);
-       mlxsw_core_port_clear(mlxsw_sp->core, local_port, mlxsw_sp);
        unregister_netdev(mlxsw_sp_port->dev); /* This calls ndo_stop */
        mlxsw_sp_port_ptp_clear(mlxsw_sp_port);
        mlxsw_sp_port_vlan_classification_set(mlxsw_sp_port, true, true);
index 50858cc10fef6b77791c9e682cbd7d2bbfc6a285..5efc07751c8d7eb02bd9304b76399009515f6aab 100644 (file)
@@ -1873,6 +1873,7 @@ int ocelot_probe_port(struct ocelot *ocelot, int port, struct regmap *target,
        if (ocelot->fdma)
                ocelot_fdma_netdev_init(ocelot, dev);
 
+       SET_NETDEV_DEVLINK_PORT(dev, &ocelot->devlink_ports[port]);
        err = register_netdev(dev);
        if (err) {
                dev_err(ocelot->dev, "register_netdev failed\n");
index 6f22aea08a644648db42179d602f76e6607a6606..93431d2ff4f14e0904d9e551a37f733a91db66f2 100644 (file)
@@ -377,9 +377,6 @@ static int mscc_ocelot_init_ports(struct platform_device *pdev,
                return -ENOMEM;
 
        for_each_available_child_of_node(ports, portnp) {
-               struct ocelot_port_private *priv;
-               struct ocelot_port *ocelot_port;
-               struct devlink_port *dlp;
                struct regmap *target;
                struct resource *res;
                char res_name[8];
@@ -420,12 +417,6 @@ static int mscc_ocelot_init_ports(struct platform_device *pdev,
                }
 
                devlink_ports_registered |= BIT(port);
-
-               ocelot_port = ocelot->ports[port];
-               priv = container_of(ocelot_port, struct ocelot_port_private,
-                                   port);
-               dlp = &ocelot->devlink_ports[port];
-               devlink_port_type_eth_set(dlp, priv->dev);
        }
 
        /* Initialize unused devlink ports at the end */
index 405786c003347b954d891604219c6eeba962eb1d..f3f0f11d8b520ab5649f66585cb27766fb32f3b7 100644 (file)
@@ -334,6 +334,8 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
        int serial_len;
        int ret;
 
+       SET_NETDEV_DEVLINK_PORT(port->netdev, &port->dl_port);
+
        rtnl_lock();
        ret = nfp_devlink_fill_eth_port(port, &eth_port);
        rtnl_unlock();
@@ -361,16 +363,6 @@ void nfp_devlink_port_unregister(struct nfp_port *port)
        devl_port_unregister(&port->dl_port);
 }
 
-void nfp_devlink_port_type_eth_set(struct nfp_port *port)
-{
-       devlink_port_type_eth_set(&port->dl_port, port->netdev);
-}
-
-void nfp_devlink_port_type_clear(struct nfp_port *port)
-{
-       devlink_port_type_clear(&port->dl_port);
-}
-
 struct devlink_port *nfp_devlink_get_devlink_port(struct net_device *netdev)
 {
        struct nfp_port *port;
index 3bae92dc899ed03930f30b9de3fb0b0ce6b84f4a..7abf0c576868e9cbdb6fc08fff621d9681a05b7f 100644 (file)
@@ -156,22 +156,17 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id)
 
        nfp_net_debugfs_vnic_add(nn, pf->ddir);
 
-       if (nn->port)
-               nfp_devlink_port_type_eth_set(nn->port);
-
        nfp_net_info(nn);
 
        if (nfp_net_is_data_vnic(nn)) {
                err = nfp_app_vnic_init(pf->app, nn);
                if (err)
-                       goto err_devlink_port_type_clean;
+                       goto err_debugfs_vnic_clean;
        }
 
        return 0;
 
-err_devlink_port_type_clean:
-       if (nn->port)
-               nfp_devlink_port_type_clear(nn->port);
+err_debugfs_vnic_clean:
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
 err_devlink_port_clean:
@@ -220,8 +215,6 @@ static void nfp_net_pf_clean_vnic(struct nfp_pf *pf, struct nfp_net *nn)
 {
        if (nfp_net_is_data_vnic(nn))
                nfp_app_vnic_clean(pf->app, nn);
-       if (nn->port)
-               nfp_devlink_port_type_clear(nn->port);
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
        if (nn->port)
index 6793cdf9ff1158b48e5fa9e727fc6b9f73e0680e..f8cd157ca1d7988b3a7f9ac9bd916af4be53511c 100644 (file)
@@ -129,8 +129,6 @@ int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
 
 int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
 void nfp_devlink_port_unregister(struct nfp_port *port);
-void nfp_devlink_port_type_eth_set(struct nfp_port *port);
-void nfp_devlink_port_type_clear(struct nfp_port *port);
 
 /* Mac stats (0x0000 - 0x0200)
  * all counters are 64bit.
index 4297ed9024c01a9929f348136b7d9e8315ea32a2..567f778433e227d480b08f260604ec2c205d384a 100644 (file)
@@ -90,7 +90,7 @@ int ionic_devlink_register(struct ionic *ionic)
                return err;
        }
 
-       devlink_port_type_eth_set(&ionic->dl_port, ionic->lif->netdev);
+       SET_NETDEV_DEVLINK_PORT(ionic->lif->netdev, &ionic->dl_port);
        devlink_register(dl);
        return 0;
 }
index 8800c8a010ff815fee74e7c4194f21a17f14c32a..b2a08f3f0e9322a75076e5083896e27bf3d0523e 100644 (file)
@@ -2534,7 +2534,6 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)
 static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
 {
        struct device *dev = common->dev;
-       struct devlink_port *dl_port;
        struct am65_cpsw_port *port;
        int ret = 0, i;
 
@@ -2561,15 +2560,14 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
                if (!port->ndev)
                        continue;
 
+               SET_NETDEV_DEVLINK_PORT(port->ndev, &port->devlink_port);
+
                ret = register_netdev(port->ndev);
                if (ret) {
                        dev_err(dev, "error registering slave net device%i %d\n",
                                i, ret);
                        goto err_cleanup_ndev;
                }
-
-               dl_port = &port->devlink_port;
-               devlink_port_type_eth_set(dl_port, port->ndev);
        }
 
        ret = am65_cpsw_register_notifiers(common);
index a7880c7ce94cab73e9991716aae3055fc41c7a6a..387c05953a8b8b02453eb6be97a858b4df8e6b73 100644 (file)
@@ -1406,7 +1406,6 @@ static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_typ
                        goto err_nsim_destroy;
        }
 
-       devlink_port_type_eth_set(devlink_port, nsim_dev_port->ns->netdev);
        list_add(&nsim_dev_port->list, &nsim_dev->port_list);
 
        return 0;
@@ -1429,7 +1428,6 @@ static void __nsim_dev_port_del(struct nsim_dev_port *nsim_dev_port)
        list_del(&nsim_dev_port->list);
        if (nsim_dev_port_is_vf(nsim_dev_port))
                devl_rate_leaf_destroy(&nsim_dev_port->devlink_port);
-       devlink_port_type_clear(devlink_port);
        nsim_destroy(nsim_dev_port->ns);
        nsim_dev_port_debugfs_exit(nsim_dev_port);
        devl_port_unregister(devlink_port);
index e470e3398abc27a20aaa573ce6f05bb2a8c0d244..e7cbae743e86d8668cf32567a1de6739cc58b369 100644 (file)
@@ -360,6 +360,7 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port)
        ns->nsim_dev_port = nsim_dev_port;
        ns->nsim_bus_dev = nsim_dev->nsim_bus_dev;
        SET_NETDEV_DEV(dev, &ns->nsim_bus_dev->dev);
+       SET_NETDEV_DEVLINK_PORT(dev, &nsim_dev_port->devlink_port);
        nsim_ethtool_init(ns);
        if (nsim_dev_port_is_pf(nsim_dev_port))
                err = nsim_init_netdevsim(ns);
index e504a18fc125421c974971166490f1ff7e2e3b03..b80dbd02e154d3ab7049045df0468835daea9f62 100644 (file)
@@ -529,7 +529,6 @@ static void dsa_port_devlink_teardown(struct dsa_port *dp)
 
 static int dsa_port_setup(struct dsa_port *dp)
 {
-       struct devlink_port *dlp = &dp->devlink_port;
        bool dsa_port_link_registered = false;
        struct dsa_switch *ds = dp->ds;
        bool dsa_port_enabled = false;
@@ -585,10 +584,6 @@ static int dsa_port_setup(struct dsa_port *dp)
        case DSA_PORT_TYPE_USER:
                of_get_mac_address(dp->dn, dp->mac);
                err = dsa_slave_create(dp);
-               if (err)
-                       break;
-
-               devlink_port_type_eth_set(dlp, dp->slave);
                break;
        }
 
@@ -608,13 +603,9 @@ static int dsa_port_setup(struct dsa_port *dp)
 
 static void dsa_port_teardown(struct dsa_port *dp)
 {
-       struct devlink_port *dlp = &dp->devlink_port;
-
        if (!dp->setup)
                return;
 
-       devlink_port_type_clear(dlp);
-
        switch (dp->type) {
        case DSA_PORT_TYPE_UNUSED:
                break;
index 83e419afa89e87ea1a82256f41e2d1466fc76c9a..158bb3f1aa0b91458b93eadb65301b3cb9f25bfb 100644 (file)
@@ -2406,6 +2406,7 @@ int dsa_slave_create(struct dsa_port *port)
        SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
 
        SET_NETDEV_DEV(slave_dev, port->ds->dev);
+       SET_NETDEV_DEVLINK_PORT(slave_dev, &port->devlink_port);
        slave_dev->dev.of_node = port->dn;
        slave_dev->vlan_features = master->vlan_features;