• Chris Wilson's avatar
    drm: Release filp before global lock · 7a2c65dd
    Chris Wilson authored
    The file is not part of the global drm resource and can be released
    prior to take the global mutex to drop the open_count (and potentially
    close) the drm device. As the global mutex is indeed global, not only
    within the device but across devices, a slow file release mechanism can
    bottleneck the entire system.
    
    However, inside drm_close_helper() there are a number of dev->driver
    callbacks that take the drm_device as the first parameter... Worryingly
    some of those callbacks may be (implicitly) depending on the global
    mutex.
    
    v2: Drop the debug message for the open-count, it's included with the
    drm_file_free() debug message -- and for good measure make that up as
    reading outside of the mutex.
    
    v3: Separate the calling of the filp cleanup outside of
    drm_global_mutex into a new drm_release_noglobal() hook, so that we can
    phase the transition. drm/savage relies on the global mutex, and there
    may be more, so be cautious.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Thomas Hellström (VMware) <thomas_os@shipmail.org>
    Reviewed-by: default avatarThomas Hellström (VMware) <thomas_os@shipmail.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200124125627.125042-1-chris@chris-wilson.co.uk
    7a2c65dd
drm_file.c 23.5 KB