crypto: chelsio - Fix softlockup with heavy I/O
removed un-necessary lock_chcr_dev to protect device state DETACH. lock is not required to protect I/O count Signed-off-by: Atul Gupta <atul.gupta@chelsio.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
b4f9166430
commit
33ddc108c5
|
@ -200,17 +200,10 @@ void chcr_verify_tag(struct aead_request *req, u8 *input, int *err)
|
|||
|
||||
static int chcr_inc_wrcount(struct chcr_dev *dev)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
spin_lock_bh(&dev->lock_chcr_dev);
|
||||
if (dev->state == CHCR_DETACH)
|
||||
err = 1;
|
||||
else
|
||||
atomic_inc(&dev->inflight);
|
||||
|
||||
spin_unlock_bh(&dev->lock_chcr_dev);
|
||||
|
||||
return err;
|
||||
return 1;
|
||||
atomic_inc(&dev->inflight);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void chcr_dec_wrcount(struct chcr_dev *dev)
|
||||
|
|
|
@ -243,15 +243,11 @@ static void chcr_detach_device(struct uld_ctx *u_ctx)
|
|||
{
|
||||
struct chcr_dev *dev = &u_ctx->dev;
|
||||
|
||||
spin_lock_bh(&dev->lock_chcr_dev);
|
||||
if (dev->state == CHCR_DETACH) {
|
||||
spin_unlock_bh(&dev->lock_chcr_dev);
|
||||
pr_debug("Detached Event received for already detach device\n");
|
||||
return;
|
||||
}
|
||||
dev->state = CHCR_DETACH;
|
||||
spin_unlock_bh(&dev->lock_chcr_dev);
|
||||
|
||||
if (atomic_read(&dev->inflight) != 0) {
|
||||
schedule_delayed_work(&dev->detach_work, WQ_DETACH_TM);
|
||||
wait_for_completion(&dev->detach_comp);
|
||||
|
|
Loading…
Reference in New Issue