Skip to content

Commit cf53db7

Browse files
Yuan Canmripard
authored andcommitted
drm/vc4: Fix missing platform_unregister_drivers() call in vc4_drm_register()
A problem about modprobe vc4 failed is triggered with the following log given: [ 420.327987] Error: Driver 'vc4_hvs' is already registered, aborting... [ 420.333904] failed to register platform driver vc4_hvs_driver [vc4]: -16 modprobe: ERROR: could not insert 'vc4': Device or resource busy The reason is that vc4_drm_register() returns platform_driver_register() directly without checking its return value, if platform_driver_register() fails, it returns without unregistering all the vc4 drivers, resulting the vc4 can never be installed later. A simple call graph is shown as below: vc4_drm_register() platform_register_drivers() # all vc4 drivers are registered platform_driver_register() driver_register() bus_add_driver() priv = kzalloc(...) # OOM happened # return without unregister drivers Fixing this problem by checking the return value of platform_driver_register() and do platform_unregister_drivers() if error happened. Fixes: c8b75bc ("drm/vc4: Add KMS support for Raspberry Pi.") Signed-off-by: Yuan Can <[email protected]> Signed-off-by: Maxime Ripard <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 3bc6a37 commit cf53db7

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/gpu/drm/vc4/vc4_drv.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,12 @@ static int __init vc4_drm_register(void)
476476
if (ret)
477477
return ret;
478478

479-
return platform_driver_register(&vc4_platform_driver);
479+
ret = platform_driver_register(&vc4_platform_driver);
480+
if (ret)
481+
platform_unregister_drivers(component_drivers,
482+
ARRAY_SIZE(component_drivers));
483+
484+
return ret;
480485
}
481486

482487
static void __exit vc4_drm_unregister(void)

0 commit comments

Comments
 (0)