]> Gentwo Git Trees - linux/.git/commitdiff
treewide: Drop pci_save_state() after pci_restore_state()
authorLukas Wunner <lukas@wunner.de>
Sun, 12 Oct 2025 13:25:02 +0000 (15:25 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 24 Nov 2025 22:58:59 +0000 (16:58 -0600)
In 2009, commit c82f63e411f1 ("PCI: check saved state before restore")
changed the behavior of pci_restore_state() such that it became necessary
to call pci_save_state() afterwards, lest recovery from subsequent PCI
errors fails.

The commit has just been reverted and so all the pci_save_state() after
pci_restore_state() calls that have accumulated in the tree are now
superfluous.  Drop them.

Two drivers chose a different approach to achieve the same result:
drivers/scsi/ipr.c and drivers/net/ethernet/intel/e1000e/netdev.c set the
pci_dev's "state_saved" flag to true before calling pci_restore_state().
Drop this as well.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Acked-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> # qat
Link: https://patch.msgid.link/c2b28cc4defa1b743cf1dedee23c455be98b397a.1760274044.git.lukas@wunner.de
30 files changed:
drivers/crypto/intel/qat/qat_common/adf_aer.c
drivers/dma/ioat/init.c
drivers/net/ethernet/broadcom/bnx2.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/hisilicon/hibmcge/hbg_err.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/fm10k/fm10k_pci.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/net/ethernet/meta/fbnic/fbnic_pci.c
drivers/net/ethernet/microchip/lan743x_main.c
drivers/net/ethernet/myricom/myri10ge/myri10ge.c
drivers/net/ethernet/neterion/s2io.c
drivers/pci/pcie/portdrv.c
drivers/scsi/bfa/bfad.c
drivers/scsi/csiostor/csio_init.c
drivers/scsi/ipr.c
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla4xxx/ql4_os.c
drivers/tty/serial/8250/8250_pci.c
drivers/tty/serial/jsm/jsm_driver.c

index 35679b21ff63bb2c2ef83f12855b2856d2d0eea7..9a5a4b35ce712345e582682ee7550c2ecf63733d 100644 (file)
@@ -105,7 +105,6 @@ void adf_dev_restore(struct adf_accel_dev *accel_dev)
                         accel_dev->accel_id);
                hw_device->reset_device(accel_dev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
        }
 }
 
@@ -204,7 +203,6 @@ static pci_ers_result_t adf_slot_reset(struct pci_dev *pdev)
        if (!pdev->is_busmaster)
                pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
        res = adf_dev_up(accel_dev, false);
        if (res && res != -EALREADY)
                return PCI_ERS_RESULT_DISCONNECT;
index 02f68b3285112133a2a32cc4ecc950fa906ec23a..227398673b731d8531b585373b4d634e3ad345b4 100644 (file)
@@ -1286,7 +1286,6 @@ static pci_ers_result_t ioat_pcie_error_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
                pci_wake_from_d3(pdev, false);
        }
 
index cb1011f6fd30729e5041ab3368269d337695d3b7..805daae9dd36214bdda57298e1749db7b55db412 100644 (file)
@@ -6444,7 +6444,6 @@ bnx2_reset_task(struct work_struct *work)
        if (!(pcicmd & PCI_COMMAND_MEMORY)) {
                /* in case PCI block has reset */
                pci_restore_state(bp->pdev);
-               pci_save_state(bp->pdev);
        }
        rc = bnx2_init_nic(bp, 1);
        if (rc) {
@@ -8718,7 +8717,6 @@ static pci_ers_result_t bnx2_io_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
 
                if (netif_running(dev))
                        err = bnx2_init_nic(bp, 1);
index f0f05d7315ac48211de7089a55c789613269fb6b..8e6eec828d48215b8f7e901ffa05215b0a61b659 100644 (file)
@@ -14216,7 +14216,6 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (netif_running(dev))
                bnx2x_set_power_state(bp, PCI_D0);
index 7f00ec7fd7b90dcd18fed75a90aa1aeaaf1b25a9..ecc12206a8e9a5ce8511b8c3921d1ae5869579f8 100644 (file)
@@ -18352,7 +18352,6 @@ static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (!netdev || !netif_running(netdev)) {
                rc = PCI_ERS_RESULT_RECOVERED;
index f92a3550e48000fa4f7ecc573d047db58e8321e1..3b1321c8ed143af399b31884793babf3374788e8 100644 (file)
@@ -2933,7 +2933,6 @@ static int t3_reenable_adapter(struct adapter *adapter)
        }
        pci_set_master(adapter->pdev);
        pci_restore_state(adapter->pdev);
-       pci_save_state(adapter->pdev);
 
        /* Free sge resources */
        t3_free_sge_resources(adapter);
index 392723ef14e5124011115afa4a2c04d4610a2c41..1ce2091cdc01a46ce91a7107a8fd6e76d728681d 100644 (file)
@@ -5456,7 +5456,6 @@ static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
 
        if (!adap) {
                pci_restore_state(pdev);
-               pci_save_state(pdev);
                return PCI_ERS_RESULT_RECOVERED;
        }
 
@@ -5471,7 +5470,6 @@ static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (t4_wait_dev_ready(adap->regs) < 0)
                return PCI_ERS_RESULT_DISCONNECT;
index 83cf75bf7a17186997915af9ed81a785eadd4997..2eb1e3d699d6074731bb2c57aa9287516f64d448 100644 (file)
@@ -158,7 +158,6 @@ static pci_ers_result_t hbg_pci_err_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        hbg_err_reset(priv);
        return PCI_ERS_RESULT_RECOVERED;
index 201322dac2330587ec9eb03dd3e323ee76b99730..75896602e732cd5d1f3b663d20ea9f7bae3bc107 100644 (file)
@@ -7195,7 +7195,6 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
                        "Cannot re-enable PCI device after reset.\n");
                result = PCI_ERS_RESULT_DISCONNECT;
        } else {
-               pdev->state_saved = true;
                pci_restore_state(pdev);
                pci_set_master(pdev);
 
index ae5fe34659cfb1ed63432f95a9258d7b819e3bfd..d75b8a50413d2a31cfa62345a0455bd22ffd4200 100644 (file)
@@ -2423,12 +2423,6 @@ static pci_ers_result_t fm10k_io_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-
-               /* After second error pci->state_saved is false, this
-                * resets it so EEH doesn't break.
-                */
-               pci_save_state(pdev);
-
                pci_wake_from_d3(pdev, false);
 
                result = PCI_ERS_RESULT_RECOVERED;
index 50be0a60ae13b0927e3803cb46f280243a99f35d..d8192aa2325487ecbca6cfaaf35b98d842a3a5ec 100644 (file)
@@ -16455,7 +16455,6 @@ static pci_ers_result_t i40e_pci_error_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
                pci_wake_from_d3(pdev, false);
 
                reg = rd32(&pf->hw, I40E_GLGEN_RTRIG);
index 86f5859e88ef538d7670c31cb143ab37e1a16f08..6c7dcca7bc448d39bb98987e551dba4ef69e2397 100644 (file)
@@ -5663,7 +5663,6 @@ static int ice_resume(struct device *dev)
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (!pci_device_is_present(pdev))
                return -ENODEV;
@@ -5763,7 +5762,6 @@ static pci_ers_result_t ice_pci_err_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
                pci_wake_from_d3(pdev, false);
 
                /* Check for life */
index 85f9589cc568cf814e73a21b54b4ecb88a00ad2f..dbea37269d2cdbe810ceba45d1bebe2194f0a213 100644 (file)
@@ -9599,7 +9599,6 @@ static int __igb_resume(struct device *dev, bool rpm)
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (!pci_device_is_present(pdev))
                return -ENODEV;
@@ -9754,7 +9753,6 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
 
                pci_enable_wake(pdev, PCI_D3hot, 0);
                pci_enable_wake(pdev, PCI_D3cold, 0);
index 728d7ca5338bf27c3ce50a2a497b238c38cfa338..7aafa60ba0c86bd135b1961fdff06c7566d2e80c 100644 (file)
@@ -7530,7 +7530,6 @@ static int __igc_resume(struct device *dev, bool rpm)
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (!pci_device_is_present(pdev))
                return -ENODEV;
@@ -7667,7 +7666,6 @@ static pci_ers_result_t igc_io_slot_reset(struct pci_dev *pdev)
        } else {
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
 
                pci_enable_wake(pdev, PCI_D3hot, 0);
                pci_enable_wake(pdev, PCI_D3cold, 0);
index 90d4e57b1c93fc62e102b07bd03920c50fb7d5c2..d65d691ac96123fc63f82a61fbb0655908c5c543 100644 (file)
@@ -12297,7 +12297,6 @@ static pci_ers_result_t ixgbe_io_slot_reset(struct pci_dev *pdev)
                adapter->hw.hw_addr = adapter->io_addr;
                pci_set_master(pdev);
                pci_restore_state(pdev);
-               pci_save_state(pdev);
 
                pci_wake_from_d3(pdev, false);
 
index 03d2fc7d9b09f8293501ecbcec79e55265bd4087..d1fbf37bdaf79340c30f65f208937a1b58b5f032 100644 (file)
@@ -4366,7 +4366,6 @@ static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
        return PCI_ERS_RESULT_RECOVERED;
 }
 
index df93625c9dfa3a11b769acdcab1320a6a4aeb4b0..08f777836a8b02fcc0c0d3254ac16aac3adaee5f 100644 (file)
@@ -2095,7 +2095,6 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        err = wait_vital(pdev);
        if (err) {
index a7a6b4db8016f3cdf9e353025c4026069cdc5fa5..0fa90baad5f88ecb520a4f1b02a598a5f39f6678 100644 (file)
@@ -574,7 +574,6 @@ static pci_ers_result_t fbnic_err_slot_reset(struct pci_dev *pdev)
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        if (pci_enable_device_mem(pdev)) {
                dev_err(&pdev->dev,
index 9d70b51ca91d62c0cff8b13b36707bba92a0b91a..e4c542fc6c2b87d91da43b9f629cd7108fdccf97 100644 (file)
@@ -3915,7 +3915,6 @@ static int lan743x_pm_resume(struct device *dev)
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        /* Restore HW_CFG that was saved during pm suspend */
        if (adapter->is_pci11x1x)
index e611ff7fa3fabad1e0060c2befa280aa2f7f21d2..7be30a8df26858aa75de2142eb8c50c92c5c3d74 100644 (file)
@@ -3416,10 +3416,6 @@ static void myri10ge_watchdog(struct work_struct *work)
                 * nic was resumed from power saving mode.
                 */
                pci_restore_state(mgp->pdev);
-
-               /* save state again for accounting reasons */
-               pci_save_state(mgp->pdev);
-
        } else {
                /* if we get back -1's from our slot, perhaps somebody
                 * powered off our card.  Don't try to reset it in
index 5026b0263d430b1a5c6f42aa64d98b1e4d519232..1e55ccb4822b0bba5d08001a0cc5a12c9c11cfb7 100644 (file)
@@ -3425,7 +3425,6 @@ static void s2io_reset(struct s2io_nic *sp)
 
                /* Restore the PCI state saved during initialization. */
                pci_restore_state(sp->pdev);
-               pci_save_state(sp->pdev);
                pci_read_config_word(sp->pdev, 0x2, &val16);
                if (check_pci_device_id(val16) != (u16)PCI_ANY_ID)
                        break;
index d1b68c18444f803f73df2c46a6ba85d1d0a0c391..38a41ccf79b9a35574bfb21befdfcd29ae38718e 100644 (file)
@@ -760,7 +760,6 @@ static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev)
        device_for_each_child(&dev->dev, &off, pcie_port_device_iter);
 
        pci_restore_state(dev);
-       pci_save_state(dev);
        return PCI_ERS_RESULT_RECOVERED;
 }
 
index ff9adfc0b332e27204aa60715f7bcdae81914d61..bdfd0651667187aa153bfe1f780282485595b121 100644 (file)
@@ -1528,7 +1528,6 @@ bfad_pci_slot_reset(struct pci_dev *pdev)
                goto out_disable_device;
        }
 
-       pci_save_state(pdev);
        pci_set_master(pdev);
 
        rc = dma_set_mask_and_coherent(&bfad->pcidev->dev, DMA_BIT_MASK(64));
index 79c8dafdd49ed2dde657eede55c417238c174562..db0c2174430ac22d2384b1b565ed59ffeb01be6a 100644 (file)
@@ -1093,7 +1093,6 @@ csio_pci_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        /* Bring HW s/m to ready state.
         * but don't resume IOs.
index 44214884deaf505feffc00cfa155c7ad205dbdce..95123689e9d1fecc834444cac79fcbdf26525a43 100644 (file)
@@ -7859,7 +7859,6 @@ static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
        struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
 
        ENTER;
-       ioa_cfg->pdev->state_saved = true;
        pci_restore_state(ioa_cfg->pdev);
 
        if (ipr_set_pcix_cmd_reg(ioa_cfg)) {
index f206267d9ecdc18f349cffc3297ea1fb8e649309..065eb91de9c0f60971550df3005e641537e1528d 100644 (file)
@@ -14434,12 +14434,6 @@ lpfc_io_slot_reset_s3(struct pci_dev *pdev)
 
        pci_restore_state(pdev);
 
-       /*
-        * As the new kernel behavior of pci_restore_state() API call clears
-        * device saved_state flag, need to save the restored state again.
-        */
-       pci_save_state(pdev);
-
        if (pdev->is_busmaster)
                pci_set_master(pdev);
 
index 5ffd9458665274991987c402d01f9c464fa2c946..9007533e36e02cbe91cd78c999b71ad6707157e0 100644 (file)
@@ -7886,11 +7886,6 @@ qla2xxx_pci_slot_reset(struct pci_dev *pdev)
 
        pci_restore_state(pdev);
 
-       /* pci_restore_state() clears the saved_state flag of the device
-        * save restored state which resets saved_state flag
-        */
-       pci_save_state(pdev);
-
        if (ha->mem_only)
                rc = pci_enable_device_mem(pdev);
        else
index a761c0aa5127fec2fe87bb91eab57713febec024..1f52379bc0b5c955aebe375c57363d9bddd8405c 100644 (file)
@@ -9796,11 +9796,6 @@ qla4xxx_pci_slot_reset(struct pci_dev *pdev)
         */
        pci_restore_state(pdev);
 
-       /* pci_restore_state() clears the saved_state flag of the device
-        * save restored state which resets saved_state flag
-        */
-       pci_save_state(pdev);
-
        /* Initialize device or resume if in suspended state */
        rc = pci_enable_device(pdev);
        if (rc) {
index 152f914c599dc5debfffeed2b3f35e4a38605e1e..65bd370f282a7d852e29c489ba5239dcd0e79e60 100644 (file)
@@ -6178,7 +6178,6 @@ static pci_ers_result_t serial8250_io_slot_reset(struct pci_dev *dev)
                return PCI_ERS_RESULT_DISCONNECT;
 
        pci_restore_state(dev);
-       pci_save_state(dev);
 
        return PCI_ERS_RESULT_RECOVERED;
 }
index 417a5b6bffc34d836bb6eddc99d5134264fe0685..8d21373cae573a8a4b388c286ce2877216a5644f 100644 (file)
@@ -355,7 +355,6 @@ static void jsm_io_resume(struct pci_dev *pdev)
        struct jsm_board *brd = pci_get_drvdata(pdev);
 
        pci_restore_state(pdev);
-       pci_save_state(pdev);
 
        jsm_uart_port_init(brd);
 }