• Daniel Vetter's avatar
    drm/fb-helper: Fix vt restore · dc5bdb68
    Daniel Vetter authored
    In the past we had a pile of hacks to orchestrate access between fbdev
    emulation and native kms clients. We've tried to streamline this, by
    always preferring the kms side above fbdev calls when a drm master
    exists, because drm master controls access to the display resources.
    
    Unfortunately this breaks existing userspace, specifically Xorg. When
    exiting Xorg first restores the console to text mode using the KDSET
    ioctl on the vt. This does nothing, because a drm master is still
    around. Then it drops the drm master status, which again does nothing,
    because logind is keeping additional drm fd open to be able to
    orchestrate vt switches. In the past this is the point where fbdev was
    restored, as part of the ->lastclose hook on the drm side.
    
    Now to fix this regression we don't want to go back to letting fbdev
    restore things whenever it feels like, or to the pile of hacks we've
    had before. Instead try and go with a minimal exception to make the
    KDSET case work again, and nothing else.
    
    This means that if userspace does a KDSET call when switching between
    graphical compositors, there will be some flickering with fbcon
    showing up for a bit. But a) that's not a regression and b) userspace
    can fix it by improving the vt switching dance - logind should have
    all the information it needs.
    
    While pondering all this I'm also wondering wheter we should have a
    SWITCH_MASTER ioctl to allow race-free master status handover. But
    that's for another day.
    
    v2: Somehow forgot to cc all the fbdev people.
    
    v3: Fix typo Alex spotted.
    Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=208179
    Cc: shlomo@fastmail.com
    Reported-and-Tested-by: shlomo@fastmail.com
    Cc: Michel Dänzer <michel@daenzer.net>
    Fixes: 64914da2 ("drm/fbdev-helper: don't force restores")
    Cc: Noralf Trønnes <noralf@tronnes.org>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Daniel Vetter <daniel.vetter@intel.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v5.7+
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Cc: Geert Uytterhoeven <geert@linux-m68k.org>
    Cc: Nathan Chancellor <natechancellor@gmail.com>
    Cc: Qiujun Huang <hqjagain@gmail.com>
    Cc: Peter Rosin <peda@axentia.se>
    Cc: linux-fbdev@vger.kernel.org
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200624092910.3280448-1-daniel.vetter@ffwll.ch
    dc5bdb68
fbcon.c 90.8 KB