ptp: ocp: Fix error path for pci_ocp_device_init()
authorJonathan Lemon <jonathan.lemon@gmail.com>
Mon, 16 Aug 2021 22:13:35 +0000 (15:13 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 17 Aug 2021 00:18:39 +0000 (17:18 -0700)
If ptp_ocp_device_init() fails, pci_disable_device() is skipped.
Fix the error handling so this case is covered.  Update ptp_ocp_remove()
so the normal exit path is identical.

Reported-by: Hulk Robot <hulkci@huawei.com>
Fixes: 773bda964921 ("ptp: ocp: Expose various resources on the timecard.")
Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/ptp/ptp_ocp.c

index 9e4317d..caf9b37 100644 (file)
@@ -1438,7 +1438,7 @@ ptp_ocp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        bp = devlink_priv(devlink);
        err = ptp_ocp_device_init(bp, pdev);
        if (err)
-               goto out_unregister;
+               goto out_disable;
 
        /* compat mode.
         * Older FPGA firmware only returns 2 irq's.
@@ -1476,8 +1476,9 @@ ptp_ocp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
 out:
        ptp_ocp_detach(bp);
-       pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
+out_disable:
+       pci_disable_device(pdev);
 out_unregister:
        devlink_unregister(devlink);
 out_free:
@@ -1493,8 +1494,8 @@ ptp_ocp_remove(struct pci_dev *pdev)
        struct devlink *devlink = priv_to_devlink(bp);
 
        ptp_ocp_detach(bp);
-       pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
+       pci_disable_device(pdev);
 
        devlink_unregister(devlink);
        devlink_free(devlink);