On Sat, 30 Mar 2019, Mikulas Patocka wrote: > Hi > > The patch a6dbe442755999960ca54a9b8ecfd9606be0ea75 ("vt: perform safe > console erase in the right order") introduces a bug. > > --- > drivers/tty/vt/vt.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: linux-5.0.5/drivers/tty/vt/vt.c > =================================================================== > --- linux-5.0.5.orig/drivers/tty/vt/vt.c 2019-03-30 19:29:26.000000000 +0100 > +++ linux-5.0.5/drivers/tty/vt/vt.c 2019-03-30 19:30:50.000000000 +0100 > @@ -1518,7 +1518,7 @@ static void csi_J(struct vc_data *vc, in > return; > } > scr_memsetw(start, vc->vc_video_erase_char, 2 * count); > - update_region(vc, (unsigned long) start, count); > + do_update_region(vc, (unsigned long) start, count); ^^^^ this is wrong too - it will clear the screen if \e[2J is printed on inactive console. We need to use con_should_update(vc), just like it was before: The patch a6dbe442755999960ca54a9b8ecfd9606be0ea75 ("vt: perform safe console erase in the right order") introduces a bug. In order to reproduce the bug - use framebuffer console with the AMDGPU driver - type "links" to start the console www browser - press 'q' and space to exit links --- now, the cursor line will be permanently visible in the center of the screen. It will stay there until something overwrites it. Before the patch, there was a call to do_update_region, the patch changes it to update_region - and this seems to cause the bug with the cursor. The bug goes away if we change update_region back to do_update_region. Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Fixes: a6dbe4427559 ("vt: perform safe console erase in the right order") --- drivers/tty/vt/vt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-5.0.5/drivers/tty/vt/vt.c =================================================================== --- linux-5.0.5.orig/drivers/tty/vt/vt.c 2019-03-30 19:29:26.000000000 +0100 +++ linux-5.0.5/drivers/tty/vt/vt.c 2019-03-31 13:06:24.000000000 +0200 @@ -1518,7 +1518,8 @@ static void csi_J(struct vc_data *vc, in return; } scr_memsetw(start, vc->vc_video_erase_char, 2 * count); - update_region(vc, (unsigned long) start, count); + if (con_should_update(vc)) + do_update_region(vc, (unsigned long) start, count); vc->vc_need_wrap = 0; }