• Daniel Vetter's avatar
    drm: trylock modest locking for fbdev panics · cb597bb3
    Daniel Vetter authored
    In the fbdev code we want to do trylocks only to avoid deadlocks and
    other ugly issues. Thus far we've only grabbed the overall modeset
    lock, but that already failed to exclude a pile of potential
    concurrent operations. With proper atomic support this will be worse.
    
    So add a trylock mode to the modeset locking code which attempts all
    locks only with trylocks, if possible. We need to track this in the
    locking functions themselves and can't restrict this to drivers since
    driver-private w/w mutexes must be treated the same way.
    
    There's still the issue that other driver private locks aren't handled
    here at all, but well can't have everything. With this we will at
    least not regress, even once atomic allows lots of concurrent kms
    activity.
    
    Aside: We should move the acquire context to stack-based allocation in
    the callers to get rid of that awful WARN_ON(kmalloc_failed) control
    flow which just blows up when memory is short. But that's material for
    separate patches.
    
    v2:
    - Fix logic inversion fumble in the fb helper.
    - Add proper kerneldoc.
    Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    cb597bb3
drm_fb_helper.c 47.4 KB