pds_core: use pci_reset_function for health reset
authorShannon Nelson <shannon.nelson@amd.com>
Fri, 16 Feb 2024 22:29:52 +0000 (14:29 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 19 Feb 2024 10:29:07 +0000 (10:29 +0000)
We get the benefit of all the PCI reset locking and recovery if
we use the existing pci_reset_function() that will call our
local reset handlers.

Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amd/pds_core/core.c
drivers/net/ethernet/amd/pds_core/core.h
drivers/net/ethernet/amd/pds_core/main.c

index 1234a4a8a4aed21acaec7e76ee284da1370a2abf..9662ee72814c0c64fab3ca08db99e888faa51124 100644 (file)
@@ -607,8 +607,7 @@ static void pdsc_check_pci_health(struct pdsc *pdsc)
        if (fw_status != PDS_RC_BAD_PCI)
                return;
 
-       pdsc_reset_prepare(pdsc->pdev);
-       pdsc_reset_done(pdsc->pdev);
+       pci_reset_function(pdsc->pdev);
 }
 
 void pdsc_health_thread(struct work_struct *work)
index 3468a63f5ae9a59b57a7df272254dcc621e484a2..92d7657dd6147e7770b7d72f8ee25deb303370b9 100644 (file)
@@ -284,9 +284,6 @@ int pdsc_devcmd_reset(struct pdsc *pdsc);
 int pdsc_dev_init(struct pdsc *pdsc);
 void pdsc_dev_uninit(struct pdsc *pdsc);
 
-void pdsc_reset_prepare(struct pci_dev *pdev);
-void pdsc_reset_done(struct pci_dev *pdev);
-
 int pdsc_intr_alloc(struct pdsc *pdsc, char *name,
                    irq_handler_t handler, void *data);
 void pdsc_intr_free(struct pdsc *pdsc, int index);
index 82901a8473068eec1a1b9576265d9fb100e31990..ab6133e7db422d3579291e3476efb48e5e0be06c 100644 (file)
@@ -469,7 +469,7 @@ static void pdsc_restart_health_thread(struct pdsc *pdsc)
        mod_timer(&pdsc->wdtimer, jiffies + 1);
 }
 
-void pdsc_reset_prepare(struct pci_dev *pdev)
+static void pdsc_reset_prepare(struct pci_dev *pdev)
 {
        struct pdsc *pdsc = pci_get_drvdata(pdev);
 
@@ -486,10 +486,11 @@ void pdsc_reset_prepare(struct pci_dev *pdev)
 
        pdsc_unmap_bars(pdsc);
        pci_release_regions(pdev);
-       pci_disable_device(pdev);
+       if (pci_is_enabled(pdev))
+               pci_disable_device(pdev);
 }
 
-void pdsc_reset_done(struct pci_dev *pdev)
+static void pdsc_reset_done(struct pci_dev *pdev)
 {
        struct pdsc *pdsc = pci_get_drvdata(pdev);
        struct device *dev = pdsc->dev;