OSDN Git Service

bnxt_en: Move devlink_register before registering netdev
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>
Mon, 27 Jan 2020 09:56:22 +0000 (04:56 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jan 2020 10:33:28 +0000 (11:33 +0100)
Latest kernels get the phys_port_name via devlink, if
ndo_get_phys_port_name is not defined. To provide the phys_port_name
correctly, register devlink before registering netdev.

Also call devlink_port_type_eth_set() after registering netdev as
devlink port updates the netdev structure and notifies user.

Cc: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c

index 676f4da..8579415 100644 (file)
@@ -11445,9 +11445,9 @@ static void bnxt_remove_one(struct pci_dev *pdev)
                bnxt_sriov_disable(bp);
 
        bnxt_dl_fw_reporters_destroy(bp, true);
-       bnxt_dl_unregister(bp);
        pci_disable_pcie_error_reporting(pdev);
        unregister_netdev(dev);
+       bnxt_dl_unregister(bp);
        bnxt_shutdown_tc(bp);
        bnxt_cancel_sp_work(bp);
        bp->sp_event = 0;
@@ -11917,11 +11917,14 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                bnxt_init_tc(bp);
        }
 
+       bnxt_dl_register(bp);
+
        rc = register_netdev(dev);
        if (rc)
-               goto init_err_cleanup_tc;
+               goto init_err_cleanup;
 
-       bnxt_dl_register(bp);
+       if (BNXT_PF(bp))
+               devlink_port_type_eth_set(&bp->dl_port, bp->dev);
        bnxt_dl_fw_reporters_create(bp);
 
        netdev_info(dev, "%s found at mem %lx, node addr %pM\n",
@@ -11931,7 +11934,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        return 0;
 
-init_err_cleanup_tc:
+init_err_cleanup:
+       bnxt_dl_unregister(bp);
        bnxt_shutdown_tc(bp);
        bnxt_clear_int_mode(bp);
 
index a8cdfbd..f2d9cd6 100644 (file)
@@ -561,7 +561,6 @@ int bnxt_dl_register(struct bnxt *bp)
                netdev_err(bp->dev, "devlink_port_register failed");
                goto err_dl_unreg;
        }
-       devlink_port_type_eth_set(&bp->dl_port, bp->dev);
 
        rc = bnxt_dl_params_register(bp);
        if (rc)