Patch "Revert "fbcon: don't lose the console font across generic->chip driver switch"" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Revert "fbcon: don't lose the console font across generic->chip driver switch"

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     revert-fbcon-don-t-lose-the-console-font-across-gene.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ff16017f6d76c0cc1785f03bcef5a60f920e931e
Author: Thomas Zimmermann <tzimmermann@xxxxxxx>
Date:   Mon Dec 19 17:05:00 2022 +0100

    Revert "fbcon: don't lose the console font across generic->chip driver switch"
    
    [ Upstream commit 12d5796d55f9fd9e4b621003127c99e176665064 ]
    
    This reverts commit ae1287865f5361fa138d4d3b1b6277908b54eac9.
    
    Always free the console font when deinitializing the framebuffer
    console. Subsequent framebuffer consoles will then use the default
    font. Rely on userspace to load any user-configured font for these
    consoles.
    
    Commit ae1287865f53 ("fbcon: don't lose the console font across
    generic->chip driver switch") was introduced to work around losing
    the font during graphics-device handover. [1][2] It kept a dangling
    pointer with the font data between loading the two consoles, which is
    fairly adventurous hack. It also never covered cases when the other
    consoles, such as VGA text mode, where involved.
    
    The problem has meanwhile been solved in userspace. Systemd comes
    with a udev rule that re-installs the configured font when a console
    comes up. [3] So the kernel workaround can be removed.
    
    This also removes one of the two special cases triggered by setting
    FBINFO_MISC_FIRMWARE in an fbdev driver.
    
    Tested during device handover from efifb and simpledrm to radeon. Udev
    reloads the configured console font for the new driver's terminal.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=892340 # 1
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=1074624 # 2
    Link: https://cgit.freedesktop.org/systemd/systemd/tree/src/vconsole/90-vconsole.rules.in?h=v222 # 3
    Reviewed-by: Javier Martinez Canillas <javierm@xxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221219160516.23436-3-tzimmermann@xxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 1b14c21af2b74..2bc8baa90c0f2 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -958,7 +958,7 @@ static const char *fbcon_startup(void)
 	set_blitting_type(vc, info);
 
 	/* Setup default font */
-	if (!p->fontdata && !vc->vc_font.data) {
+	if (!p->fontdata) {
 		if (!fontname[0] || !(font = find_font(fontname)))
 			font = get_default_font(info->var.xres,
 						info->var.yres,
@@ -968,8 +968,6 @@ static const char *fbcon_startup(void)
 		vc->vc_font.height = font->height;
 		vc->vc_font.data = (void *)(p->fontdata = font->data);
 		vc->vc_font.charcount = font->charcount;
-	} else {
-		p->fontdata = vc->vc_font.data;
 	}
 
 	cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres);
@@ -1135,9 +1133,9 @@ static void fbcon_init(struct vc_data *vc, int init)
 	ops->p = &fb_display[fg_console];
 }
 
-static void fbcon_free_font(struct fbcon_display *p, bool freefont)
+static void fbcon_free_font(struct fbcon_display *p)
 {
-	if (freefont && p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0))
+	if (p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0))
 		kfree(p->fontdata - FONT_EXTRA_WORDS * sizeof(int));
 	p->fontdata = NULL;
 	p->userfont = 0;
@@ -1172,8 +1170,8 @@ static void fbcon_deinit(struct vc_data *vc)
 	struct fb_info *info;
 	struct fbcon_ops *ops;
 	int idx;
-	bool free_font = true;
 
+	fbcon_free_font(p);
 	idx = con2fb_map[vc->vc_num];
 
 	if (idx == -1)
@@ -1184,8 +1182,6 @@ static void fbcon_deinit(struct vc_data *vc)
 	if (!info)
 		goto finished;
 
-	if (info->flags & FBINFO_MISC_FIRMWARE)
-		free_font = false;
 	ops = info->fbcon_par;
 
 	if (!ops)
@@ -1197,9 +1193,8 @@ static void fbcon_deinit(struct vc_data *vc)
 	ops->initialized = false;
 finished:
 
-	fbcon_free_font(p, free_font);
-	if (free_font)
-		vc->vc_font.data = NULL;
+	fbcon_free_font(p);
+	vc->vc_font.data = NULL;
 
 	if (vc->vc_hi_font_mask && vc->vc_screenbuf)
 		set_vc_hi_font(vc, false);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux