.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;
        }
        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)
 
        if (err)
                goto err_connect_mac;
 
-       err = dpaa2_eth_dl_register(priv);
+       err = dpaa2_eth_dl_alloc(priv);
        if (err)
                goto err_dl_register;
 
        dpaa2_dbg_add(priv);
 #endif
 
+       dpaa2_eth_dl_register(priv);
        dev_info(dev, "Probed interface %s\n", net_dev->name);
        return 0;
 
 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:
        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
 
        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);
 
 
 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);