Thomas Bogendoerfer 7eb160
From: Leon Romanovsky <leonro@nvidia.com>
Thomas Bogendoerfer 7eb160
Date: Sat, 25 Sep 2021 14:22:42 +0300
Thomas Bogendoerfer 7eb160
Subject: bnxt_en: Register devlink instance at the end devlink configuration
Thomas Bogendoerfer 7eb160
Patch-mainline: v5.16-rc1
Thomas Bogendoerfer 7eb160
Git-commit: 5df290e7a70367d476406420d19c4dea14d45dd1
Thomas Bogendoerfer 7eb160
References: jsc#SLE-18978
Thomas Bogendoerfer 7eb160
Thomas Bogendoerfer 7eb160
Move devlink_register() to be last command in devlink configuration
Thomas Bogendoerfer 7eb160
sequence, so no user space access will be possible till devlink instance
Thomas Bogendoerfer 7eb160
is fully operable. As part of this change, the devlink_params_publish
Thomas Bogendoerfer 7eb160
call is removed as not needed.
Thomas Bogendoerfer 7eb160
Thomas Bogendoerfer 7eb160
This change fixes forgotten devlink_params_unpublish() too.
Thomas Bogendoerfer 7eb160
Thomas Bogendoerfer 7eb160
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Thomas Bogendoerfer 7eb160
Signed-off-by: David S. Miller <davem@davemloft.net>
Thomas Bogendoerfer 7eb160
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 7eb160
---
Thomas Bogendoerfer 7eb160
 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c |   15 ++++++---------
Thomas Bogendoerfer 7eb160
 1 file changed, 6 insertions(+), 9 deletions(-)
Thomas Bogendoerfer 7eb160
Thomas Bogendoerfer 7eb160
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
Thomas Bogendoerfer 7eb160
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
Thomas Bogendoerfer 7eb160
@@ -745,14 +745,10 @@ static int bnxt_dl_params_register(struc
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
 	rc = devlink_params_register(bp->dl, bnxt_dl_params,
Thomas Bogendoerfer 7eb160
 				     ARRAY_SIZE(bnxt_dl_params));
Thomas Bogendoerfer 7eb160
-	if (rc) {
Thomas Bogendoerfer 7eb160
+	if (rc)
Thomas Bogendoerfer 7eb160
 		netdev_warn(bp->dev, "devlink_params_register failed. rc=%d\n",
Thomas Bogendoerfer 7eb160
 			    rc);
Thomas Bogendoerfer 7eb160
-		return rc;
Thomas Bogendoerfer 7eb160
-	}
Thomas Bogendoerfer 7eb160
-	devlink_params_publish(bp->dl);
Thomas Bogendoerfer 7eb160
-
Thomas Bogendoerfer 7eb160
-	return 0;
Thomas Bogendoerfer 7eb160
+	return rc;
Thomas Bogendoerfer 7eb160
 }
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
 static void bnxt_dl_params_unregister(struct bnxt *bp)
Thomas Bogendoerfer 7eb160
@@ -792,9 +788,8 @@ int bnxt_dl_register(struct bnxt *bp)
Thomas Bogendoerfer 7eb160
 	    bp->hwrm_spec_code > 0x10803)
Thomas Bogendoerfer 7eb160
 		bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY;
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
-	devlink_register(dl);
Thomas Bogendoerfer 7eb160
 	if (!BNXT_PF(bp))
Thomas Bogendoerfer 7eb160
-		return 0;
Thomas Bogendoerfer 7eb160
+		goto out;
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
 	attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
Thomas Bogendoerfer 7eb160
 	attrs.phys.port_number = bp->pf.port_id;
Thomas Bogendoerfer 7eb160
@@ -811,6 +806,8 @@ int bnxt_dl_register(struct bnxt *bp)
Thomas Bogendoerfer 7eb160
 	if (rc)
Thomas Bogendoerfer 7eb160
 		goto err_dl_port_unreg;
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
+out:
Thomas Bogendoerfer 7eb160
+	devlink_register(dl);
Thomas Bogendoerfer 7eb160
 	return 0;
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
 err_dl_port_unreg:
Thomas Bogendoerfer 7eb160
@@ -824,10 +821,10 @@ void bnxt_dl_unregister(struct bnxt *bp)
Thomas Bogendoerfer 7eb160
 {
Thomas Bogendoerfer 7eb160
 	struct devlink *dl = bp->dl;
Thomas Bogendoerfer 7eb160
 
Thomas Bogendoerfer 7eb160
+	devlink_unregister(dl);
Thomas Bogendoerfer 7eb160
 	if (BNXT_PF(bp)) {
Thomas Bogendoerfer 7eb160
 		bnxt_dl_params_unregister(bp);
Thomas Bogendoerfer 7eb160
 		devlink_port_unregister(&bp->dl_port);
Thomas Bogendoerfer 7eb160
 	}
Thomas Bogendoerfer 7eb160
-	devlink_unregister(dl);
Thomas Bogendoerfer 7eb160
 	devlink_free(dl);
Thomas Bogendoerfer 7eb160
 }