mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
hwrng: stm32 - Fix runtime PM cleanup on registration failure
stm32_rng_probe() enables autosuspend and runtime PM before registering the
hwrng. If devm_hwrng_register() fails, probe returns with runtime PM left
enabled and autosuspend still selected.
The remove callback also only disables runtime PM and does not undo
pm_runtime_use_autosuspend().
Use devm_pm_runtime_enable() so runtime PM is unwound automatically on
probe failure and driver detach. Since the managed cleanup also disables
runtime PM,drop the remove callback.
Fixes: c6a97c42e3 ("hwrng: stm32 - add support for STM32 HW RNG")
Cc: stable@vger.kernel.org
Signed-off-by: Can Peng <pengcan@kylinos.cn>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
a7e2dfb7da
commit
1163a476a5
|
|
@ -368,11 +368,6 @@ static int stm32_rng_init(struct hwrng *rng)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void stm32_rng_remove(struct platform_device *ofdev)
|
||||
{
|
||||
pm_runtime_disable(&ofdev->dev);
|
||||
}
|
||||
|
||||
static int __maybe_unused stm32_rng_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct stm32_rng_private *priv = dev_get_drvdata(dev);
|
||||
|
|
@ -590,7 +585,9 @@ static int stm32_rng_probe(struct platform_device *ofdev)
|
|||
|
||||
pm_runtime_set_autosuspend_delay(dev, 100);
|
||||
pm_runtime_use_autosuspend(dev);
|
||||
pm_runtime_enable(dev);
|
||||
ret = devm_pm_runtime_enable(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return devm_hwrng_register(dev, &priv->rng);
|
||||
}
|
||||
|
|
@ -602,7 +599,6 @@ static struct platform_driver stm32_rng_driver = {
|
|||
.of_match_table = stm32_rng_match,
|
||||
},
|
||||
.probe = stm32_rng_probe,
|
||||
.remove = stm32_rng_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(stm32_rng_driver);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user