crypto: chelsio - Fix softlockup with heavy I/O
authorAtul Gupta <atul.gupta@chelsio.com>
Thu, 2 May 2019 10:47:27 +0000 (03:47 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 9 May 2019 05:17:22 +0000 (13:17 +0800)
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>
drivers/crypto/chelsio/chcr_algo.c
drivers/crypto/chelsio/chcr_core.c

index 8a76fce..73bbd49 100644 (file)
@@ -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)
index 239b933..029a735 100644 (file)
@@ -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);