Message ID | 20211122113234.851618-1-gaurav.jain@nxp.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Herbert Xu |
Headers | show |
Series | [v2] crypto: caam: save caam memory to support crypto engine retry mechanism. | expand |
On 11/22/2021 1:33 PM, Gaurav Jain wrote: > When caam queue is full (-ENOSPC), caam frees descriptor memory. > crypto-engine checks if retry support is true and h/w queue > is full(-ENOSPC), then requeue the crypto request. > During processing the requested descriptor again, caam gives below error. > (caam_jr 30902000.jr: 40000006: DECO: desc idx 0: Invalid KEY Command). > > This patch adds a check to return when caam input ring is full > and retry support is true. so descriptor memory is not freed > and requeued request can be processed again. > > Fixes: 2d653936eb2cf ("crypto: caam - enable crypto-engine retry mechanism") > Signed-off-by: Gaurav Jain <gaurav.jain@nxp.com> > Reviewed-by: Horia Geantă <horia.geanta@nxp.com> Again, please don't copy R-b tags from internal reviews. I am fine with the patch. Thanks, Horia
On Mon, Nov 22, 2021 at 05:02:34PM +0530, Gaurav Jain wrote: > When caam queue is full (-ENOSPC), caam frees descriptor memory. > crypto-engine checks if retry support is true and h/w queue > is full(-ENOSPC), then requeue the crypto request. > During processing the requested descriptor again, caam gives below error. > (caam_jr 30902000.jr: 40000006: DECO: desc idx 0: Invalid KEY Command). > > This patch adds a check to return when caam input ring is full > and retry support is true. so descriptor memory is not freed > and requeued request can be processed again. > > Fixes: 2d653936eb2cf ("crypto: caam - enable crypto-engine retry mechanism") > Signed-off-by: Gaurav Jain <gaurav.jain@nxp.com> > Reviewed-by: Horia Geantă <horia.geanta@nxp.com> > --- > drivers/crypto/caam/caamalg.c | 6 ++++++ > drivers/crypto/caam/caamhash.c | 3 +++ > drivers/crypto/caam/caampkc.c | 3 +++ > 3 files changed, 12 insertions(+) Patch applied. Thanks.
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 8697ae53b063..d3d8bb0a6990 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -1533,6 +1533,9 @@ static int aead_do_one_req(struct crypto_engine *engine, void *areq) ret = caam_jr_enqueue(ctx->jrdev, desc, aead_crypt_done, req); + if (ret == -ENOSPC && engine->retry_support) + return ret; + if (ret != -EINPROGRESS) { aead_unmap(ctx->jrdev, rctx->edesc, req); kfree(rctx->edesc); @@ -1762,6 +1765,9 @@ static int skcipher_do_one_req(struct crypto_engine *engine, void *areq) ret = caam_jr_enqueue(ctx->jrdev, desc, skcipher_crypt_done, req); + if (ret == -ENOSPC && engine->retry_support) + return ret; + if (ret != -EINPROGRESS) { skcipher_unmap(ctx->jrdev, rctx->edesc, req); kfree(rctx->edesc); diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c index e8a6d8bc43b5..36ef738e4a18 100644 --- a/drivers/crypto/caam/caamhash.c +++ b/drivers/crypto/caam/caamhash.c @@ -765,6 +765,9 @@ static int ahash_do_one_req(struct crypto_engine *engine, void *areq) ret = caam_jr_enqueue(jrdev, desc, state->ahash_op_done, req); + if (ret == -ENOSPC && engine->retry_support) + return ret; + if (ret != -EINPROGRESS) { ahash_unmap(jrdev, state->edesc, req, 0); kfree(state->edesc); diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c index bf6275ffc4aa..886727576710 100644 --- a/drivers/crypto/caam/caampkc.c +++ b/drivers/crypto/caam/caampkc.c @@ -380,6 +380,9 @@ static int akcipher_do_one_req(struct crypto_engine *engine, void *areq) ret = caam_jr_enqueue(jrdev, desc, req_ctx->akcipher_op_done, req); + if (ret == -ENOSPC && engine->retry_support) + return ret; + if (ret != -EINPROGRESS) { rsa_pub_unmap(jrdev, req_ctx->edesc, req); rsa_io_unmap(jrdev, req_ctx->edesc, req);