Commit 6c39d116 authored by Dmitry Kasatkin's avatar Dmitry Kasatkin Committed by Herbert Xu

crypto: omap-sham - backlog handling fix

Previous commit "removed redundant locking" introduced
a bug in handling backlog.
In certain cases, when async request complete callback will
call complete() on -EINPROGRESS code, it will cause uncompleted requests.
It does not happen in implementation similar to crypto test manager,
but it will happen in implementation similar to dm-crypt.
Backlog needs to be checked before dequeuing next request.
Signed-off-by: default avatarDmitry Kasatkin <dmitry.kasatkin@nokia.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 8ad225e8
...@@ -664,7 +664,7 @@ static void omap_sham_finish_req(struct ahash_request *req, int err) ...@@ -664,7 +664,7 @@ static void omap_sham_finish_req(struct ahash_request *req, int err)
static int omap_sham_handle_queue(struct omap_sham_dev *dd, static int omap_sham_handle_queue(struct omap_sham_dev *dd,
struct ahash_request *req) struct ahash_request *req)
{ {
struct crypto_async_request *async_req, *backlog = 0; struct crypto_async_request *async_req, *backlog;
struct omap_sham_reqctx *ctx; struct omap_sham_reqctx *ctx;
struct ahash_request *prev_req; struct ahash_request *prev_req;
unsigned long flags; unsigned long flags;
...@@ -677,11 +677,10 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd, ...@@ -677,11 +677,10 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
spin_unlock_irqrestore(&dd->lock, flags); spin_unlock_irqrestore(&dd->lock, flags);
return ret; return ret;
} }
backlog = crypto_get_backlog(&dd->queue);
async_req = crypto_dequeue_request(&dd->queue); async_req = crypto_dequeue_request(&dd->queue);
if (async_req) { if (async_req)
dd->flags |= FLAGS_BUSY; dd->flags |= FLAGS_BUSY;
backlog = crypto_get_backlog(&dd->queue);
}
spin_unlock_irqrestore(&dd->lock, flags); spin_unlock_irqrestore(&dd->lock, flags);
if (!async_req) if (!async_req)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment