From: Jiri Pirko <j...@mellanox.com>

Change the init/fini flow and register devlink port instance before
netdev. Now it is needed for correct behavior of phys_port_name
generation, but in general it makes sense to register devlink port
first.

Signed-off-by: Jiri Pirko <j...@mellanox.com>
Reviewed-by: Jakub Kicinski <jakub.kicin...@netronome.com>
---
v1->v2:
- new patch
---
 .../net/ethernet/netronome/nfp/nfp_net_main.c | 32 ++++++++++---------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c 
b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
index f35278062476..986464d4a206 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
@@ -150,37 +150,39 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net 
*nn, unsigned int id)
 
        nn->id = id;
 
+       if (nn->port) {
+               err = nfp_devlink_port_register(pf->app, nn->port);
+               if (err)
+                       return err;
+       }
+
        err = nfp_net_init(nn);
        if (err)
-               return err;
+               goto err_devlink_port_clean;
 
        nfp_net_debugfs_vnic_add(nn, pf->ddir);
 
-       if (nn->port) {
-               err = nfp_devlink_port_register(pf->app, nn->port);
-               if (err)
-                       goto err_dfs_clean;
+       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_clean;
+                       goto err_devlink_port_type_clean;
        }
 
        return 0;
 
-err_devlink_port_clean:
-       if (nn->port) {
+err_devlink_port_type_clean:
+       if (nn->port)
                nfp_devlink_port_type_clear(nn->port);
-               nfp_devlink_port_unregister(nn->port);
-       }
-err_dfs_clean:
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
+err_devlink_port_clean:
+       if (nn->port)
+               nfp_devlink_port_unregister(nn->port);
        return err;
 }
 
@@ -223,12 +225,12 @@ 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) {
+       if (nn->port)
                nfp_devlink_port_type_clear(nn->port);
-               nfp_devlink_port_unregister(nn->port);
-       }
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
+       if (nn->port)
+               nfp_devlink_port_unregister(nn->port);
 }
 
 static int nfp_net_pf_alloc_irqs(struct nfp_pf *pf)
-- 
2.17.2

Reply via email to