if (err <= 0)
                return err;
 
-       err = devlink_params_register(devlink, nfp_devlink_params,
-                                     ARRAY_SIZE(nfp_devlink_params));
-       if (err)
-               return err;
-
-       devlink_params_publish(devlink);
-       return 0;
+       return devlink_params_register(devlink, nfp_devlink_params,
+                                      ARRAY_SIZE(nfp_devlink_params));
 }
 
 void nfp_devlink_params_unregister(struct nfp_pf *pf)
 
        if (err)
                goto err_unmap;
 
-       devlink_register(devlink);
        err = nfp_shared_buf_register(pf);
        if (err)
                goto err_devlink_unreg;
                goto err_stop_app;
 
        mutex_unlock(&pf->lock);
+       devlink_register(devlink);
 
        return 0;
 
        nfp_shared_buf_unregister(pf);
 err_devlink_unreg:
        cancel_work_sync(&pf->port_refresh_work);
-       devlink_unregister(devlink);
        nfp_net_pf_app_clean(pf);
 err_unmap:
        nfp_net_pci_unmap_mem(pf);
 {
        struct nfp_net *nn, *next;
 
+       devlink_unregister(priv_to_devlink(pf));
        mutex_lock(&pf->lock);
        list_for_each_entry_safe(nn, next, &pf->vnics, vnic_list) {
                if (!nfp_net_is_data_vnic(nn))
 
        nfp_devlink_params_unregister(pf);
        nfp_shared_buf_unregister(pf);
-       devlink_unregister(priv_to_devlink(pf));
 
        nfp_net_pf_free_irqs(pf);
        nfp_net_pf_app_clean(pf);