Devlink callbacks need access to device resources such as ptt lock, hence performing the devlink registration after the device initialization.
Signed-off-by: Sudarsana Reddy Kalluru <skall...@marvell.com> Signed-off-by: Ariel Elior <ael...@marvell.com> --- drivers/net/ethernet/qlogic/qed/qed_main.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c index 829dd60..fdd84f5 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_main.c +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c @@ -472,22 +472,24 @@ static struct qed_dev *qed_probe(struct pci_dev *pdev, } DP_INFO(cdev, "PCI init completed successfully\n"); - rc = qed_devlink_register(cdev); + rc = qed_hw_prepare(cdev, QED_PCI_DEFAULT); if (rc) { - DP_INFO(cdev, "Failed to register devlink.\n"); + DP_ERR(cdev, "hw prepare failed\n"); goto err2; } - rc = qed_hw_prepare(cdev, QED_PCI_DEFAULT); + rc = qed_devlink_register(cdev); if (rc) { - DP_ERR(cdev, "hw prepare failed\n"); - goto err2; + DP_INFO(cdev, "Failed to register devlink.\n"); + goto err3; } DP_INFO(cdev, "qed_probe completed successfully\n"); return cdev; +err3: + qed_hw_remove(cdev); err2: qed_free_pci(cdev); err1: @@ -501,14 +503,14 @@ static void qed_remove(struct qed_dev *cdev) if (!cdev) return; + qed_devlink_unregister(cdev); + qed_hw_remove(cdev); qed_free_pci(cdev); qed_set_power_state(cdev, PCI_D3hot); - qed_devlink_unregister(cdev); - qed_free_cdev(cdev); } -- 1.8.3.1