#define ADF_STATUS_AE_STARTED 6
 #define ADF_STATUS_PF_RUNNING 7
 #define ADF_STATUS_IRQ_ALLOCATED 8
+#define ADF_STATUS_CRYPTO_ALGS_REGISTERED 9
 
 enum adf_dev_reset_mode {
        ADF_DEV_RESET_ASYNC = 0,
 
                clear_bit(ADF_STATUS_STARTED, &accel_dev->status);
                return -EFAULT;
        }
+       set_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status);
 
        if (!list_empty(&accel_dev->compression_list) && qat_comp_algs_register()) {
                dev_err(&GET_DEV(accel_dev),
        clear_bit(ADF_STATUS_STARTING, &accel_dev->status);
        clear_bit(ADF_STATUS_STARTED, &accel_dev->status);
 
-       if (!list_empty(&accel_dev->crypto_list)) {
+       if (!list_empty(&accel_dev->crypto_list) &&
+           test_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status)) {
                qat_algs_unregister();
                qat_asym_algs_unregister();
        }
+       clear_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status);
 
        if (!list_empty(&accel_dev->compression_list))
                qat_comp_algs_unregister();