net: ethernet: ti: Move devlink registration to be last devlink command
authorLeon Romanovsky <leonro@nvidia.com>
Sat, 25 Sep 2021 11:22:56 +0000 (14:22 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Sep 2021 15:31:59 +0000 (16:31 +0100)
This change prevents from users to access device before devlink is
fully configured.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/am65-cpsw-nuss.c
drivers/net/ethernet/ti/cpsw_new.c

index c2ea53ca92b66ec5115c9fb23be4d76886b4cee7..0de5f4a4fe089324d8c353eab638b603a784fca6 100644 (file)
@@ -2429,7 +2429,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
        dl_priv = devlink_priv(common->devlink);
        dl_priv->common = common;
 
-       devlink_register(common->devlink);
        /* Provide devlink hook to switch mode when multiple external ports
         * are present NUSS switchdev driver is enabled.
         */
@@ -2442,7 +2441,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
                        dev_err(dev, "devlink params reg fail ret:%d\n", ret);
                        goto dl_unreg;
                }
-               devlink_params_publish(common->devlink);
        }
 
        for (i = 1; i <= common->port_num; i++) {
@@ -2463,7 +2461,7 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
                }
                devlink_port_type_eth_set(dl_port, port->ndev);
        }
-
+       devlink_register(common->devlink);
        return ret;
 
 dl_port_unreg:
@@ -2474,7 +2472,6 @@ dl_port_unreg:
                devlink_port_unregister(dl_port);
        }
 dl_unreg:
-       devlink_unregister(common->devlink);
        devlink_free(common->devlink);
        return ret;
 }
@@ -2485,6 +2482,8 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)
        struct am65_cpsw_port *port;
        int i;
 
+       devlink_unregister(common->devlink);
+
        for (i = 1; i <= common->port_num; i++) {
                port = am65_common_get_port(common, i);
                dl_port = &port->devlink_port;
@@ -2493,13 +2492,11 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)
        }
 
        if (!AM65_CPSW_IS_CPSW2G(common) &&
-           IS_ENABLED(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV)) {
-               devlink_params_unpublish(common->devlink);
-               devlink_params_unregister(common->devlink, am65_cpsw_devlink_params,
+           IS_ENABLED(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV))
+               devlink_params_unregister(common->devlink,
+                                         am65_cpsw_devlink_params,
                                          ARRAY_SIZE(am65_cpsw_devlink_params));
-       }
 
-       devlink_unregister(common->devlink);
        devlink_free(common->devlink);
 }
 
index 204b4826303c1e5e50745a94976f3cd58f464cb6..1530532748a86a1fe1ca0d063f490be4c6784741 100644 (file)
@@ -1810,7 +1810,6 @@ static int cpsw_register_devlink(struct cpsw_common *cpsw)
        dl_priv = devlink_priv(cpsw->devlink);
        dl_priv->cpsw = cpsw;
 
-       devlink_register(cpsw->devlink);
        ret = devlink_params_register(cpsw->devlink, cpsw_devlink_params,
                                      ARRAY_SIZE(cpsw_devlink_params));
        if (ret) {
@@ -1818,21 +1817,19 @@ static int cpsw_register_devlink(struct cpsw_common *cpsw)
                goto dl_unreg;
        }
 
-       devlink_params_publish(cpsw->devlink);
+       devlink_register(cpsw->devlink);
        return ret;
 
 dl_unreg:
-       devlink_unregister(cpsw->devlink);
        devlink_free(cpsw->devlink);
        return ret;
 }
 
 static void cpsw_unregister_devlink(struct cpsw_common *cpsw)
 {
-       devlink_params_unpublish(cpsw->devlink);
+       devlink_unregister(cpsw->devlink);
        devlink_params_unregister(cpsw->devlink, cpsw_devlink_params,
                                  ARRAY_SIZE(cpsw_devlink_params));
-       devlink_unregister(cpsw->devlink);
        devlink_free(cpsw->devlink);
 }