[PATCH] crypto: stm32/cryp: fix autosuspend cleanup during teardown
Maxime MERE
maxime.mere at foss.st.com
Fri Aug 14 04:44:19 PDT 2026
On 8/8/26 11:36, Guangshuo Li wrote:
> stm32_cryp_probe() calls pm_runtime_use_autosuspend(), but neither the
> probe failure path nor stm32_cryp_remove() calls the matching
> pm_runtime_dont_use_autosuspend() before disabling runtime PM.
>
> If the autosuspend delay is set to a negative value while autosuspend
> is enabled, the runtime PM core increments usage_count to prevent
> runtime suspend. Without calling pm_runtime_dont_use_autosuspend()
> during teardown, this reference is not dropped and usage_count remains
> unbalanced.
>
> Add the missing pm_runtime_dont_use_autosuspend() calls to both the
> probe failure and remove paths before disabling runtime PM.
>
> This issue was found by manual code inspection.
>
> Fixes: 65f9aa36ee47 ("crypto: stm32/cryp - Add power management support")
> Cc: stable at vger.kernel.org
> Signed-off-by: Guangshuo Li <lgs201920130244 at gmail.com>
> ---
> drivers/crypto/stm32/stm32-cryp.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/crypto/stm32/stm32-cryp.c b/drivers/crypto/stm32/stm32-cryp.c
> index b79877099942..74f6e329b1fa 100644
> --- a/drivers/crypto/stm32/stm32-cryp.c
> +++ b/drivers/crypto/stm32/stm32-cryp.c
> @@ -2691,6 +2691,7 @@ static int stm32_cryp_probe(struct platform_device *pdev)
> dma_release_channel(cryp->dma_lch_out);
> err_dma:
> err_rst:
> + pm_runtime_dont_use_autosuspend(dev);
> pm_runtime_disable(dev);
> pm_runtime_put_noidle(dev);
>
> @@ -2722,6 +2723,7 @@ static void stm32_cryp_remove(struct platform_device *pdev)
> if (cryp->dma_lch_out)
> dma_release_channel(cryp->dma_lch_out);
>
> + pm_runtime_dont_use_autosuspend(cryp->dev);
> pm_runtime_disable(cryp->dev);
> pm_runtime_put_noidle(cryp->dev);
>
Reviewed-by: Maxime Méré <maxime.mere at foss.st.com>
Cheers,
Maxime
More information about the linux-arm-kernel
mailing list