In case the drm_modeset_register_all() function fails, its error code
will be ignored. Instead make the drm_dev_register() bail out in case of
such an error.

Fixes: 79190ea2658a ("drm: Add callbacks for late registering")
Reviewed-by: Neil Armstrong <neil.armstr...@linaro.org>
Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 drivers/gpu/drm/drm_drv.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 535f16e7882e..3c835c99daad 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -949,8 +949,11 @@ int drm_dev_register(struct drm_device *dev, unsigned long 
flags)
                        goto err_minors;
        }
 
-       if (drm_core_check_feature(dev, DRIVER_MODESET))
-               drm_modeset_register_all(dev);
+       if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+               ret = drm_modeset_register_all(dev);
+               if (ret)
+                       goto err_unload;
+       }
 
        DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
                 driver->name, driver->major, driver->minor,
@@ -960,6 +963,9 @@ int drm_dev_register(struct drm_device *dev, unsigned long 
flags)
 
        goto out_unlock;
 
+err_unload:
+       if (dev->driver->unload)
+               dev->driver->unload(dev);
 err_minors:
        remove_compat_control_link(dev);
        drm_minor_unregister(dev, DRM_MINOR_ACCEL);
-- 
2.39.2

Reply via email to