dpaa2-eth: Register devlink instance at the end of probe
authorLeon Romanovsky <leonro@nvidia.com>
Sat, 25 Sep 2021 11:22:44 +0000 (14:22 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Sep 2021 15:31:59 +0000 (16:31 +0100)
Move devlink_register to be the last command in the initialization
sequence.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h

index 426926f..7fefe15 100644 (file)
@@ -189,7 +189,7 @@ static const struct devlink_ops dpaa2_eth_devlink_ops = {
        .trap_group_action_set = dpaa2_eth_dl_trap_group_action_set,
 };
 
-int dpaa2_eth_dl_register(struct dpaa2_eth_priv *priv)
+int dpaa2_eth_dl_alloc(struct dpaa2_eth_priv *priv)
 {
        struct net_device *net_dev = priv->net_dev;
        struct device *dev = net_dev->dev.parent;
@@ -203,15 +203,23 @@ int dpaa2_eth_dl_register(struct dpaa2_eth_priv *priv)
        }
        dl_priv = devlink_priv(priv->devlink);
        dl_priv->dpaa2_priv = priv;
+       return 0;
+}
+
+void dpaa2_eth_dl_free(struct dpaa2_eth_priv *priv)
+{
+       devlink_free(priv->devlink);
+}
+
 
+void dpaa2_eth_dl_register(struct dpaa2_eth_priv *priv)
+{
        devlink_register(priv->devlink);
-       return 0;
 }
 
 void dpaa2_eth_dl_unregister(struct dpaa2_eth_priv *priv)
 {
        devlink_unregister(priv->devlink);
-       devlink_free(priv->devlink);
 }
 
 int dpaa2_eth_dl_port_add(struct dpaa2_eth_priv *priv)
index 7065c71..03c168b 100644 (file)
@@ -4431,7 +4431,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)
        if (err)
                goto err_connect_mac;
 
-       err = dpaa2_eth_dl_register(priv);
+       err = dpaa2_eth_dl_alloc(priv);
        if (err)
                goto err_dl_register;
 
@@ -4453,6 +4453,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)
        dpaa2_dbg_add(priv);
 #endif
 
+       dpaa2_eth_dl_register(priv);
        dev_info(dev, "Probed interface %s\n", net_dev->name);
        return 0;
 
@@ -4461,7 +4462,7 @@ err_netdev_reg:
 err_dl_port_add:
        dpaa2_eth_dl_traps_unregister(priv);
 err_dl_trap_register:
-       dpaa2_eth_dl_unregister(priv);
+       dpaa2_eth_dl_free(priv);
 err_dl_register:
        dpaa2_eth_disconnect_mac(priv);
 err_connect_mac:
@@ -4508,6 +4509,8 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
        net_dev = dev_get_drvdata(dev);
        priv = netdev_priv(net_dev);
 
+       dpaa2_eth_dl_unregister(priv);
+
 #ifdef CONFIG_DEBUG_FS
        dpaa2_dbg_remove(priv);
 #endif
@@ -4519,7 +4522,7 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
 
        dpaa2_eth_dl_port_del(priv);
        dpaa2_eth_dl_traps_unregister(priv);
-       dpaa2_eth_dl_unregister(priv);
+       dpaa2_eth_dl_free(priv);
 
        if (priv->do_link_poll)
                kthread_stop(priv->poll_thread);
index cdb623d..628d2d4 100644 (file)
@@ -725,7 +725,10 @@ void dpaa2_eth_set_rx_taildrop(struct dpaa2_eth_priv *priv,
 
 extern const struct dcbnl_rtnl_ops dpaa2_eth_dcbnl_ops;
 
-int dpaa2_eth_dl_register(struct dpaa2_eth_priv *priv);
+int dpaa2_eth_dl_alloc(struct dpaa2_eth_priv *priv);
+void dpaa2_eth_dl_free(struct dpaa2_eth_priv *priv);
+
+void dpaa2_eth_dl_register(struct dpaa2_eth_priv *priv);
 void dpaa2_eth_dl_unregister(struct dpaa2_eth_priv *priv);
 
 int dpaa2_eth_dl_port_add(struct dpaa2_eth_priv *priv);