mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
mmc: sdhci-of-aspeed: Remove children before releasing SDC resources
Probe failure and removal leave SDHCI child devices registered after the
parent clock and managed resources are released.
Unregister the OF children in reverse order before disabling the parent
clock on both paths. Use of_platform_device_destroy() because manual
child creation does not set the flag required by of_platform_depopulate().
This issue was identified during our ongoing static-analysis research
while reviewing kernel code.
Fixes: bb7b8ec62d ("mmc: sdhci-of-aspeed: Add support for the ASPEED SD controller")
Co-developed-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
Assisted-by: OpenAI:GPT-5.6
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulfh@kernel.org>
This commit is contained in:
parent
d5ea0d226e
commit
4396d70bb7
|
|
@ -560,12 +560,14 @@ static int aspeed_sdc_probe(struct platform_device *pdev)
|
|||
cpdev = of_platform_device_create(child, NULL, &pdev->dev);
|
||||
if (!cpdev) {
|
||||
ret = -ENODEV;
|
||||
goto err_clk;
|
||||
goto err_children;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_children:
|
||||
device_for_each_child_reverse(&pdev->dev, NULL, of_platform_device_destroy);
|
||||
err_clk:
|
||||
clk_disable_unprepare(sdc->clk);
|
||||
return ret;
|
||||
|
|
@ -575,6 +577,7 @@ static void aspeed_sdc_remove(struct platform_device *pdev)
|
|||
{
|
||||
struct aspeed_sdc *sdc = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
device_for_each_child_reverse(&pdev->dev, NULL, of_platform_device_destroy);
|
||||
clk_disable_unprepare(sdc->clk);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user