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)

Reply via email to