[PATCH 1/3] crypto: stm32/hash - Properly handle pm_runtime_get failing

Thomas BOURGOIN thomas.bourgoin at foss.st.com
Wed Aug 9 00:44:30 PDT 2023


Hello,

Thanks for the modification.
This should be applied for fixes/stable.
Please add Cc: stable at vger.kernel.org in your commit message.

Best regards,

Thomas

On 7/31/23 18:54, Uwe Kleine-König wrote:
> If pm_runtime_get() (disguised as pm_runtime_resume_and_get()) fails, this
> means the clk wasn't prepared and enabled. Returning early in this case
> however is wrong as then the following resource frees are skipped and this
> is never catched up. So do all the cleanups but clk_disable_unprepare().
> 
> Also don't emit a warning, as stm32_hash_runtime_resume() already emitted
> one.
> 
> Note that the return value of stm32_hash_remove() is mostly ignored by
> the device core. The only effect of returning zero instead of an error
> value is to suppress another warning in platform_remove(). So return 0
> even if pm_runtime_resume_and_get() failed.
> 
> Fixes: 8b4d566de6a5 ("crypto: stm32/hash - Add power management support")
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
> ---
>   drivers/crypto/stm32/stm32-hash.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/crypto/stm32/stm32-hash.c b/drivers/crypto/stm32/stm32-hash.c
> index 88a186c3dd78..75d281edae2a 100644
> --- a/drivers/crypto/stm32/stm32-hash.c
> +++ b/drivers/crypto/stm32/stm32-hash.c
> @@ -2121,9 +2121,7 @@ static int stm32_hash_remove(struct platform_device *pdev)
>   	if (!hdev)
>   		return -ENODEV;
>   
> -	ret = pm_runtime_resume_and_get(hdev->dev);
> -	if (ret < 0)
> -		return ret;
> +	ret = pm_runtime_get_sync(hdev->dev);
>   
>   	stm32_hash_unregister_algs(hdev);
>   
> @@ -2139,7 +2137,8 @@ static int stm32_hash_remove(struct platform_device *pdev)
>   	pm_runtime_disable(hdev->dev);
>   	pm_runtime_put_noidle(hdev->dev);
>   
> -	clk_disable_unprepare(hdev->clk);
> +	if (ret >= 0)
> +		clk_disable_unprepare(hdev->clk);
>   
>   	return 0;
>   }



More information about the linux-arm-kernel mailing list