summaryrefslogtreecommitdiff
path: root/drivers/crypto/tegra-aes.c
diff options
context:
space:
mode:
authorAmit Kamath <akamath@nvidia.com>2012-03-29 11:18:07 +0530
committerSimone Willett <swillett@nvidia.com>2012-04-16 14:05:14 -0700
commitc8147f8213ebd279816256f79adee23085dbf4b8 (patch)
treeeb115b97abc1cc060e7ae1081e31665aa45e0400 /drivers/crypto/tegra-aes.c
parent868e86c9fcca509bf4c1c9378721a3a0965c5ebc (diff)
crypto: tegra-aes: schedule single work handler
Multiple queue were getting scheduled leading to race condition. Bug 955259 Change-Id: I7dd8d0d15b17552c3a611449642439ae21fa4b5d Signed-off-by: Amit Kamath <akamath@nvidia.com> Reviewed-on: http://git-master/r/93097 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Gerrit_Virtual_Submit Reviewed-by: Nitin Kumbhar <nkumbhar@nvidia.com> Reviewed-by: Sanjay Singh Rawat <srawat@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'drivers/crypto/tegra-aes.c')
-rw-r--r--drivers/crypto/tegra-aes.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/crypto/tegra-aes.c b/drivers/crypto/tegra-aes.c
index 22a96ed343eb..291cb4be5c39 100644
--- a/drivers/crypto/tegra-aes.c
+++ b/drivers/crypto/tegra-aes.c
@@ -890,15 +890,18 @@ static int tegra_aes_crypt(struct ablkcipher_request *req, unsigned long mode)
spin_lock_irqsave(&dd->lock, flags);
err = ablkcipher_enqueue_request(&dd->queue, req);
- bsev_busy = test_and_set_bit(FLAGS_BUSY, &dd->bsev.busy);
- bsea_busy = test_and_set_bit(FLAGS_BUSY, &dd->bsea.busy);
spin_unlock_irqrestore(&dd->lock, flags);
-
- if (!bsev_busy)
+ bsev_busy = test_and_set_bit(FLAGS_BUSY, &dd->bsev.busy);
+ if (!bsev_busy) {
queue_work(bsev_wq, &bsev_work);
+ goto finish;
+ }
+
+ bsea_busy = test_and_set_bit(FLAGS_BUSY, &dd->bsea.busy);
if (!bsea_busy)
queue_work(bsea_wq, &bsea_work);
+finish:
return err;
}