crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY
authorYi Yang <yiyang13@huawei.com>
Tue, 15 Oct 2024 02:09:35 +0000 (02:09 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 28 Oct 2024 10:32:36 +0000 (18:32 +0800)
Since commit 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for
PADATA_RESET"), the pcrypt encryption and decryption operations return
-EAGAIN when the CPU goes online or offline. In alg_test(), a WARN is
generated when pcrypt_aead_decrypt() or pcrypt_aead_encrypt() returns
-EAGAIN, the unnecessary panic will occur when panic_on_warn set 1.
Fix this issue by calling crypto layer directly without parallelization
in that case.

Fixes: 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for PADATA_RESET")
Signed-off-by: Yi Yang <yiyang13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/pcrypt.c

index d0d954f..7fc79e7 100644 (file)
@@ -117,8 +117,10 @@ static int pcrypt_aead_encrypt(struct aead_request *req)
        err = padata_do_parallel(ictx->psenc, padata, &ctx->cb_cpu);
        if (!err)
                return -EINPROGRESS;
-       if (err == -EBUSY)
-               return -EAGAIN;
+       if (err == -EBUSY) {
+               /* try non-parallel mode */
+               return crypto_aead_encrypt(creq);
+       }
 
        return err;
 }
@@ -166,8 +168,10 @@ static int pcrypt_aead_decrypt(struct aead_request *req)
        err = padata_do_parallel(ictx->psdec, padata, &ctx->cb_cpu);
        if (!err)
                return -EINPROGRESS;
-       if (err == -EBUSY)
-               return -EAGAIN;
+       if (err == -EBUSY) {
+               /* try non-parallel mode */
+               return crypto_aead_decrypt(creq);
+       }
 
        return err;
 }