• Takashi Iwai's avatar
    fbcon: Fix vc attr at deinit · f9955dca
    Takashi Iwai authored
    commit 8aac7f34 upstream.
    
    fbcon can deal with vc_hi_font_mask (the upper 256 chars) and adjust
    the vc attrs dynamically when vc_hi_font_mask is changed at
    fbcon_init().  When the vc_hi_font_mask is set, it remaps the attrs in
    the existing console buffer with one bit shift up (for 9 bits), while
    it remaps with one bit shift down (for 8 bits) when the value is
    cleared.  It works fine as long as the font gets updated after fbcon
    was initialized.
    
    However, we hit a bizarre problem when the console is switched to
    another fb driver (typically from vesafb or efifb to drmfb).  At
    switching to the new fb driver, we temporarily rebind the console to
    the dummy console, then rebind to the new driver.  During the
    switching, we leave the modified attrs as is.  Thus, the new fbcon
    takes over the old buffer as if it were to contain 8 bits chars
    (although the attrs are still shifted for 9 bits), and effectively
    this results in the yellow color texts instead of the original white
    color, as found in the bugzilla entry below.
    
    An easy fix for this is to re-adjust the attrs before leaving the
    fbcon at con_deinit callback.  Since the code to adjust the attrs is
    already present in the current fbcon code, in this patch, we simply
    factor out the relevant code, and call it from fbcon_deinit().
    
    Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1000619Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f9955dca
fbcon.c 88.5 KB