• David Herrmann's avatar
    drm: cleanup drm_core_{init,exit}() · 2cc107dc
    David Herrmann authored
    Various cleanups to the DRM core initialization and exit handlers:
    
     - Register chrdev last: Once register_chrdev() returns, open() will
       succeed on the given chrdevs. This is usually not an issue, as no
       chardevs are registered, yet. However, nodes can be created by
       user-space via mknod(2), even though such major/minor combinations are
       unknown to the kernel. Avoid calling into drm_stub_open() in those
       cases.
       Again, drm_stub_open() would just bail out as the inode is unknown,
       but it's really non-obvious if you hack on drm_stub_open().
    
     - Unify error-paths into just one label. All the error-path helpers can
       be called even though the constructors were not called yet, or failed.
       Hence, just call all cleanups unconditionally.
    
     - Call into drm_global_release(). This is a no-op, but provides
       debugging helpers in case there're GLOBALS left on module unload. This
       function was unused until now.
    
     - Use DRM_ERROR() instead of printk(), and also print the error-code on
       failure (even if it is static!).
    
     - Don't throw away error-codes of register_chrdev()!
    
     - Don't hardcode -1 as errno. This is just plain wrong.
    
     - Order exit-handlers in the exact reverse order of initialization
       (except if the order actually matters for syncing-reasons, which is
       not the case here, though).
    
    v2:
     - Call drm_core_exit() directly from the init-error-handler. Requires to
       drop __exit annotation, though.
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/20160901124837.680-7-dh.herrmann@gmail.com
    2cc107dc
drm_drv.c 23.2 KB