]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: qat - skip restart for down devices
authorAhsan Atta <ahsan.atta@intel.com>
Wed, 13 May 2026 15:16:57 +0000 (17:16 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 22 May 2026 12:25:29 +0000 (20:25 +0800)
Skip the shutdown and restart flow when adf_slot_reset() is entered
for a device that is already down. In that case, leave
ADF_STATUS_RESTARTING clear and let adf_slot_reset() restore PCI
function state without calling adf_dev_up(), re-enabling SR-IOV, or
sending restarted notifications.

This is in preparation for adding reset_prepare() and reset_done()
callbacks in adf_aer.c.

Cc: stable@vger.kernel.org
Signed-off-by: Ahsan Atta <ahsan.atta@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/intel/qat/qat_common/adf_aer.c

index 365637e40439dfc9e97e417f1c0ca37cb20f27e6..7255cac5aaa6865cfb944a67ce85bcee7dfd4f67 100644 (file)
@@ -33,6 +33,9 @@ static pci_ers_result_t adf_error_detected(struct pci_dev *pdev,
                return PCI_ERS_RESULT_DISCONNECT;
        }
 
+       if (!adf_dev_started(accel_dev))
+               return PCI_ERS_RESULT_CAN_RECOVER;
+
        adf_error_notifier(accel_dev);
        adf_pf2vf_notify_fatal_error(accel_dev);
        set_bit(ADF_STATUS_RESTARTING, &accel_dev->status);
@@ -204,6 +207,9 @@ static pci_ers_result_t adf_slot_reset(struct pci_dev *pdev)
                return PCI_ERS_RESULT_DISCONNECT;
        }
 
+       if (!adf_devmgr_in_reset(accel_dev))
+               goto reset_complete;
+
        pci_restore_state(pdev);
        res = adf_dev_up(accel_dev, false);
        if (res && res != -EALREADY)
@@ -213,6 +219,8 @@ static pci_ers_result_t adf_slot_reset(struct pci_dev *pdev)
        adf_pf2vf_notify_restarted(accel_dev);
        adf_dev_restarted_notify(accel_dev);
        clear_bit(ADF_STATUS_RESTARTING, &accel_dev->status);
+
+reset_complete:
        return PCI_ERS_RESULT_RECOVERED;
 }