On Tue, 2007-05-01 at 13:17 +0100, James Pearson wrote: > Antonino A. Daplas wrote: > > On Mon, 2007-04-30 at 13:58 +0100, James Pearson wrote: > > > >>Antonino A. Daplas wrote: > >> > >>>On Fri, 2007-04-27 at 18:08 +0100, James Pearson wrote:
> It does indeed seem that the switching back and forth between text and > graphics does appear to be part of the issue - in my previous testing I > probably did do this (but didn't include this in my recipe above) - so > here is a new 'recipe' that shows the problem (for me) > > boot to run level 3 > > if not root, then make sure /dev/console is writeable > > login and type: > > setterm -blank 0 > > start X > > type into an xterm: > > while true; do echo "" > /dev/console; usleep 100000; done > > while the above loop is running switch to the text console and back > again (Ctrl-Alt-F1 then Ctrl-Alt-F7) > > ... and the screen will be shifting (and wrapping) to the left. > Okay, this makes me see the problem more clearly. It looks like that vt/console layer is unreliable in terms of checking for the text/graphics mode of the current console. Instead of auditing the console code, I'll just have vgacon check for the mode. Try the attached patch and let me know if it helps. Tony
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index d0d2733..2460b82 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c @@ -660,6 +660,9 @@ #endif static void vgacon_cursor(struct vc_data *c, int mode) { + if (c->vc_mode != KD_TEXT) + return; + vgacon_restore_screen(c); switch (mode) { @@ -1318,7 +1321,7 @@ static int vgacon_scroll(struct vc_data unsigned long oldo; unsigned int delta; - if (t || b != c->vc_rows || vga_is_gfx) + if (t || b != c->vc_rows || vga_is_gfx || c->vc_mode != KD_TEXT) return 0; if (!vga_hardscroll_enabled || lines >= c->vc_rows / 2)