• Daniel Vetter's avatar
    fbmem: pull fbcon_fb_blanked out of fb_blank · de29ae5c
    Daniel Vetter authored
    There's a callchain of:
    
    fbcon_fb_blanked -> do_(un)blank_screen -> consw->con_blank
    	-> fbcon_blank -> fb_blank
    
    Things don't go horribly wrong because the BKL console_lock safes the
    day, but that's about it. And the seeming recursion is broken in 2
    ways:
    - Starting from the fbdev ioctl we set FBINFO_MISC_USEREVENT, which
      tells the fbcon_blank code to not call fb_blank. This was required
      to not deadlock when recursing on the fb_notifier_chain mutex.
    - Starting from the con_blank hook we're getting saved by the
      console_blanked checks in do_blank/unblank_screen. Or at least
      that's my theory.
    
    Anyway, recursion isn't awesome, so let's stop it. Breaking the
    recursion avoids the need to be in the FBINFO_MISC_USEREVENT critical
    section, so lets move it out of that too.
    
    The astute reader will notice that fb_blank seems to require
    lock_fb_info(), which the fbcon code seems to ignore. I have no idea
    how to fix that problem, so let's keep ignoring it.
    
    v2: I forgot the sysfs blanking code.
    
    v3: Fix typo in callchain in the commmit message (Sam).
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
    Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
    Cc: Peter Rosin <peda@axentia.se>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Mikulas Patocka <mpatocka@redhat.com>
    Cc: Rob Clark <robdclark@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190528090304.9388-26-daniel.vetter@ffwll.ch
    de29ae5c
fbmem.c 47.2 KB