crypto: stm32/hash - fix performance issues
authorLionel Debieve <lionel.debieve@st.com>
Mon, 29 Jan 2018 14:28:10 +0000 (15:28 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 15 Feb 2018 15:26:55 +0000 (23:26 +0800)
Fixing bugs link to stress tests. Bad results are
detected during testmgr selftests executing in a
faster environment. bufcnt value may be resetted and
false IT are sometimes detected.

Signed-off-by: Lionel Debieve <lionel.debieve@st.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/stm32/stm32-hash.c

index 37815aa7f5de78b9263ff79c7f069824c4ea6a3a..d540cdfaf993f2808ef96fe669e992fb20ab7006 100644 (file)
@@ -744,13 +744,15 @@ static int stm32_hash_final_req(struct stm32_hash_dev *hdev)
        struct ahash_request *req = hdev->req;
        struct stm32_hash_request_ctx *rctx = ahash_request_ctx(req);
        int err;
+       int buflen = rctx->bufcnt;
+
+       rctx->bufcnt = 0;
 
        if (!(rctx->flags & HASH_FLAGS_CPU))
                err = stm32_hash_dma_send(hdev);
        else
-               err = stm32_hash_xmit_cpu(hdev, rctx->buffer, rctx->bufcnt, 1);
+               err = stm32_hash_xmit_cpu(hdev, rctx->buffer, buflen, 1);
 
-       rctx->bufcnt = 0;
 
        return err;
 }
@@ -1105,6 +1107,8 @@ static irqreturn_t stm32_hash_irq_handler(int irq, void *dev_id)
                reg &= ~HASH_SR_OUTPUT_READY;
                stm32_hash_write(hdev, HASH_SR, reg);
                hdev->flags |= HASH_FLAGS_OUTPUT_READY;
+               /* Disable IT*/
+               stm32_hash_write(hdev, HASH_IMR, 0);
                return IRQ_WAKE_THREAD;
        }