• Daniel Vetter's avatar
    drm/fb-helper: delay hotplug handling when partially bound · 343065a6
    Daniel Vetter authored
    Ok, this requires quite a dance to actually hit:
    1) We plug in a 2nd screen, enable it in both X and (by vt-switching)
    in the fbcon.
    2) We disable that screen again in with xrandr.
    3) We vt-switch again, so that fbcon displays on the 2nd screen, but X
    on the first screen. This obviously needs a driver that doesn't switch
    off unused functions when regaining the VT.
    3) When X controls the vt, we unplug that screen.
    
    Now drm_fb_helper_hotplug_event we noticed that that some crtcs are
    bound, but because we still have the fbcon on the 2nd screeen we also
    have bound set. Which means the fbcon wrongly assumes it's in control
    of everything an happily disables the output on the 2nd screen, but
    enables its fb on the first screen.
    
    Work around this issue by counting how many crtcs are bound and how
    many are bound to fbcon and assuming that when fbcon isn't bound to
    all of them, it better not touch the output configuration.
    
    Conceptually this is the same as only restoring the fbcon output
    configuration on the driver's ->lastclose, when we're sure that no one
    else is using kms. So this should be consistent with existing kms
    drivers.
    
    Chris has created a separate patch for the intel ddx, but I think we
    should fix this issue here regardless - the fbcon messing with the
    output config while it's not fully in control simply isn't a too
    polite behaviour.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50772Tested-by: default avatarMaxim A. Nikulin <M.A.Nikulin@gmail.com>
    Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    343065a6
drm_fb_helper.c 37 KB