crypto: marvell/cesa - Use crypto_wait_req
authorHerbert Xu <herbert@gondor.apana.org.au>
Tue, 24 Jan 2023 09:11:11 +0000 (17:11 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 3 Feb 2023 04:54:54 +0000 (12:54 +0800)
This patch replaces the custom crypto completion function with
crypto_req_done.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/marvell/cesa/hash.c

index c72b067..8d84ad4 100644 (file)
@@ -1104,47 +1104,27 @@ struct ahash_alg mv_sha256_alg = {
        }
 };
 
-struct mv_cesa_ahash_result {
-       struct completion completion;
-       int error;
-};
-
-static void mv_cesa_hmac_ahash_complete(struct crypto_async_request *req,
-                                       int error)
-{
-       struct mv_cesa_ahash_result *result = req->data;
-
-       if (error == -EINPROGRESS)
-               return;
-
-       result->error = error;
-       complete(&result->completion);
-}
-
 static int mv_cesa_ahmac_iv_state_init(struct ahash_request *req, u8 *pad,
                                       void *state, unsigned int blocksize)
 {
-       struct mv_cesa_ahash_result result;
+       DECLARE_CRYPTO_WAIT(result);
        struct scatterlist sg;
        int ret;
 
        ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
-                                  mv_cesa_hmac_ahash_complete, &result);
+                                  crypto_req_done, &result);
        sg_init_one(&sg, pad, blocksize);
        ahash_request_set_crypt(req, &sg, pad, blocksize);
-       init_completion(&result.completion);
 
        ret = crypto_ahash_init(req);
        if (ret)
                return ret;
 
        ret = crypto_ahash_update(req);
-       if (ret && ret != -EINPROGRESS)
-               return ret;
+       ret = crypto_wait_req(ret, &result);
 
-       wait_for_completion_interruptible(&result.completion);
-       if (result.error)
-               return result.error;
+       if (ret)
+               return ret;
 
        ret = crypto_ahash_export(req, state);
        if (ret)
@@ -1158,7 +1138,7 @@ static int mv_cesa_ahmac_pad_init(struct ahash_request *req,
                                  u8 *ipad, u8 *opad,
                                  unsigned int blocksize)
 {
-       struct mv_cesa_ahash_result result;
+       DECLARE_CRYPTO_WAIT(result);
        struct scatterlist sg;
        int ret;
        int i;
@@ -1172,17 +1152,12 @@ static int mv_cesa_ahmac_pad_init(struct ahash_request *req,
                        return -ENOMEM;
 
                ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
-                                          mv_cesa_hmac_ahash_complete,
-                                          &result);
+                                          crypto_req_done, &result);
                sg_init_one(&sg, keydup, keylen);
                ahash_request_set_crypt(req, &sg, ipad, keylen);
-               init_completion(&result.completion);
 
                ret = crypto_ahash_digest(req);
-               if (ret == -EINPROGRESS) {
-                       wait_for_completion_interruptible(&result.completion);
-                       ret = result.error;
-               }
+               ret = crypto_wait_req(ret, &result);
 
                /* Set the memory region to 0 to avoid any leak. */
                kfree_sensitive(keydup);