diff options
author | Amit Kamath <akamath@nvidia.com> | 2012-03-29 11:18:07 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-04-16 14:05:14 -0700 |
commit | c8147f8213ebd279816256f79adee23085dbf4b8 (patch) | |
tree | eb115b97abc1cc060e7ae1081e31665aa45e0400 /drivers/crypto/tegra-aes.c | |
parent | 868e86c9fcca509bf4c1c9378721a3a0965c5ebc (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.c | 11 |
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; } |