Thread (2 messages) 2 messages, 2 authors, 2003-01-20

Re: [Linux-fbdev-devel] fbcon scrolling + initialisation oddity

From: Antonino Daplas <hidden>
Date: 2003-01-20 01:30:54
Also in: lkml

On Mon, 2003-01-20 at 04:03, Russell King wrote:
1. YWRAP scrolling.

There appears to be something weird going on with fbcon scrolling in 2.5.59
when using YWRAP.  The best example is what happens when scrolling a large
file (say, /etc/termcap) in less.

While scrolling down in the file, the screen scrolls correctly for the
most part.  At some point, the screen stops scrolling and the last line
which normally displays the less prompt character ":" is replaced by
the next line of text.  Continuing to scroll down produces no visible
changes.

Once enough scrolling has occurred, suddenly the screen jumps and we get
the proper text displayed.

Also, if you scroll line by line until the ":" is replaced by text as
above, scrolling back up one line replaces the ":" and scrolling upwards
scrolls the screen up correctly.

As an additional behaviour point, if you scroll down until the ":" just
disappears and then some extra lines, hit 'q' to exit less, followed by
^L, most of the screen is cleared, except for the very top few lines.
I haven't checked, but I suspect the number of lines left at the top of
the screen is equal to the number of lines we're off the bottom of the
screen.
fb_pan_display() does not test for YWRAP.  Can you try this?

Tony

diff -Naur linux-2.5.59/drivers/video/fbmem.c linux/drivers/video/fbmem.c
--- linux-2.5.59/drivers/video/fbmem.c	2003-01-20 01:10:12.000000000 +0000
+++ linux/drivers/video/fbmem.c	2003-01-20 01:14:27.000000000 +0000
@@ -724,11 +724,15 @@
 {
         int xoffset = var->xoffset;
         int yoffset = var->yoffset;
+	int ybottom = var->yoffset;
         int err;
 
+	if (!(var->vmode & FB_VMODE_YWRAP))
+		ybottom += info->var.yres;
+
         if (xoffset < 0 || yoffset < 0 || !info->fbops->fb_pan_display ||
             xoffset + info->var.xres > info->var.xres_virtual ||
-            yoffset + info->var.yres > info->var.yres_virtual)
+            ybottom > info->var.yres_virtual)
                 return -EINVAL;
 	if ((err = info->fbops->fb_pan_display(var, info)))
 		return err;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help