• Ilija Hadzic's avatar
    drm: do not sleep on vblank while holding a mutex · 8f4ff2b0
    Ilija Hadzic authored
    drm_wait_vblank must be DRM_UNLOCKED because otherwise it
    will grab the drm_global_mutex and then go to sleep until the vblank
    event it is waiting for. That can wreck havoc in the windowing system
    because if one process issues this ioctl, it will block all other
    processes for the duration of all vblanks between the current and the
    one it is waiting for. In some cases it can block the entire windowing
    system.
    
    v2: incorporate comments received from Daniel Vetter and
        Michel Daenzer.
    
    v3/v4: after a lengty discussion with Daniel Vetter, it was concluded
           that the only thing not yet protected with locks and atomic
           ops is the write to dev->last_vblank_wait. It's only used in a
           debug file in proc, and the current code already employs no
           correct locking: the proc file only takes dev->struct_mutex,
           whereas drm_wait_vblank implicitly took the drm_global_mutex.
           Given all this, it's not worth bothering to try to fix
           the locks at this time.
    Signed-off-by: default avatarIlija Hadzic <ihadzic@research.bell-labs.com>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    8f4ff2b0
drm_drv.c 16.4 KB