diff options
author | Zain Wang <wzz@rock-chips.com> | 2017-07-24 09:23:14 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-08-03 14:00:23 +0800 |
commit | 9a42e4eed3fcd7ba8dff6622384cd08bfe5ef707 (patch) | |
tree | 028c03333db731d410cf51018598301a4b1dca8b /drivers/crypto/rockchip/rk3288_crypto_ahash.c | |
parent | 641eacd15696a65b08880985701c8082872da136 (diff) | |
download | op-kernel-dev-9a42e4eed3fcd7ba8dff6622384cd08bfe5ef707.zip op-kernel-dev-9a42e4eed3fcd7ba8dff6622384cd08bfe5ef707.tar.gz |
crypto: rockchip - return the err code when unable dequeue the crypto request
Sometime we would unable to dequeue the crypto request, in this case,
we should finish crypto and return the err code.
Signed-off-by: zain wang <wzz@rock-chips.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/rockchip/rk3288_crypto_ahash.c')
-rw-r--r-- | drivers/crypto/rockchip/rk3288_crypto_ahash.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c index 9b55585..ebc46e0 100644 --- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c +++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c @@ -166,6 +166,7 @@ static int rk_ahash_digest(struct ahash_request *req) { struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm); + struct crypto_async_request *async_req, *backlog; struct rk_crypto_info *dev = NULL; unsigned long flags; int ret; @@ -202,8 +203,21 @@ static int rk_ahash_digest(struct ahash_request *req) spin_lock_irqsave(&dev->lock, flags); ret = crypto_enqueue_request(&dev->queue, &req->base); + backlog = crypto_get_backlog(&dev->queue); + async_req = crypto_dequeue_request(&dev->queue); spin_unlock_irqrestore(&dev->lock, flags); + if (!async_req) { + dev_err(dev->dev, "async_req is NULL !!\n"); + return ret; + } + if (backlog) { + backlog->complete(backlog, -EINPROGRESS); + backlog = NULL; + } + + dev->ahash_req = ahash_request_cast(async_req); + tasklet_schedule(&dev->queue_task); /* |