| From 86a9d3d66639c919bec669718b53c8c3b0ec02b3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 28 May 2024 16:05:48 +0200 |
| Subject: crypto: stm32/cryp - call finalize with bh disabled |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Maxime Méré <maxime.mere@foss.st.com> |
| |
| [ Upstream commit 56ddb9aa3b324c2d9645b5a7343e46010cf3f6ce ] |
| |
| The finalize operation in interrupt mode produce a produces a spinlock |
| recursion warning. The reason is the fact that BH must be disabled |
| during this process. |
| |
| Signed-off-by: Maxime Méré <maxime.mere@foss.st.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/crypto/stm32/stm32-cryp.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/crypto/stm32/stm32-cryp.c b/drivers/crypto/stm32/stm32-cryp.c |
| index 11ad4ffdce0d..84f5f30d5ddd 100644 |
| --- a/drivers/crypto/stm32/stm32-cryp.c |
| +++ b/drivers/crypto/stm32/stm32-cryp.c |
| @@ -11,6 +11,7 @@ |
| #include <crypto/internal/des.h> |
| #include <crypto/internal/skcipher.h> |
| #include <crypto/scatterwalk.h> |
| +#include <linux/bottom_half.h> |
| #include <linux/clk.h> |
| #include <linux/delay.h> |
| #include <linux/err.h> |
| @@ -1665,8 +1666,11 @@ static irqreturn_t stm32_cryp_irq_thread(int irq, void *arg) |
| it_mask &= ~IMSCR_OUT; |
| stm32_cryp_write(cryp, cryp->caps->imsc, it_mask); |
| |
| - if (!cryp->payload_in && !cryp->header_in && !cryp->payload_out) |
| + if (!cryp->payload_in && !cryp->header_in && !cryp->payload_out) { |
| + local_bh_disable(); |
| stm32_cryp_finish_req(cryp, 0); |
| + local_bh_enable(); |
| + } |
| |
| return IRQ_HANDLED; |
| } |
| -- |
| 2.43.0 |
| |