rocket_register() registers the facade platform device before registering
the platform driver. If platform_driver_register() fails, module
initialization returns an error without unregistering the device. The
module exit function is not called after a failed initialization, so the
platform device and its resources remain registered.
Unregister the platform device when driver registration fails.
Fixes: ed98261b4168 ("accel/rocket: Add a new driver for Rockchip's NPU")
Cc: [email protected]
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <[email protected]>
---
drivers/accel/rocket/rocket_drv.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/accel/rocket/rocket_drv.c
b/drivers/accel/rocket/rocket_drv.c
index 5d7805c41dc3..4ea65d6eec81 100644
--- a/drivers/accel/rocket/rocket_drv.c
+++ b/drivers/accel/rocket/rocket_drv.c
@@ -285,11 +285,17 @@ static struct platform_driver rocket_driver = {
static int __init rocket_register(void)
{
+ int ret;
+
drm_dev = platform_device_register_simple("rknn", -1, NULL, 0);
if (IS_ERR(drm_dev))
return PTR_ERR(drm_dev);
- return platform_driver_register(&rocket_driver);
+ ret = platform_driver_register(&rocket_driver);
+ if (ret)
+ platform_device_unregister(drm_dev);
+
+ return ret;
}
static void __exit rocket_unregister(void)
--
2.34.1