From: Alexander Kern <alex.kern@gmx.de>
To: Antonino Daplas <adaplas@pol.net>
Cc: fbdev <linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: Fwd: [PATCH 2.5.59] fix for fbcon.c
Date: Wed, 22 Jan 2003 18:45:16 +0100 [thread overview]
Message-ID: <200301221845.16983.alex.kern@gmx.de> (raw)
In-Reply-To: <1043052322.3282.41.camel@localhost.localdomain>
Hello,
thanks, it look good for me.
Regards
Alex Kern
Am Montag, 20. Januar 2003 09:45 schrieb Antonino Daplas:
> On Mon, 2003-01-20 at 02:56, Alexander Kern wrote:
> [...]
>
> > --- linux-2.5.orig/drivers/video/console/fbcon.c 2003-01-17
> > 16:13:53.000000000 +0100 +++
> > linux/drivers/video/console/fbcon.c 2003-01-19 19:17:23.000000000 +0100
> > @@ -1876,17 +1876,23 @@
> > struct display *p = &fb_display[vc->vc_num];
> > struct fb_info *info = p->fb_info;
> > struct fb_var_screeninfo var = info->var;
> > - int err;
> > + int err; int x_diff, y_diff;
> >
> > var.xres = width * vc->vc_font.width;
> > var.yres = height * vc->vc_font.height;
> > var.activate = FB_ACTIVATE_NOW;
> > -
> > + x_diff = info->var.xres - var.xres;
> > + y_diff = info->var.yres - var.yres;
> > + if(x_diff < 0 || x_diff > vc->vc_font.width ||
> > + (y_diff < 0 || y_diff > vc->vc_font.height)) {
> > + DPRINTK("resize now %ix%i\n", var.xres, var.yres);
> > err = fb_set_var(&var, info);
> > return (err || var.xres != info->var.xres ||
> > - var.yres != info->var.yres) ?
> > - -EINVAL : 0;
> > -
> > + var.yres != info->var.yres) ? -EINVAL : 0;
> > + } else {
> > + DPRINTK("prevent resize\n");
> > + return 0;
> > + }
> > }
> >
> > static int fbcon_switch(struct vc_data *vc)
>
> Yes, that will work, only if all your console have the same window
> size. If the size of one of your console is different, then these tests
> (x_diff > vc->vc_font.width || y_diff > vc->vc_font.height) will become
> true each time you switch consoles, so you'll be back with a yres of
> 1040 instead of 1050. The best solution is for the driver to round up
> to 1050 if 1040 is not acceptable.
>
> Still, its much better than the old one :-). If you don't mind, I'll
> add a few things to your patch:
>
> a. We do not need to activate the hardware immediately if there is a
> chance of failure.
>
> b. The xres/yres returned from fb_set_var() will be acceptable as long
> as the value is within a fontwidth/fontheight. This should fix hardware
> that only has a limited set of video modes.
>
> BTW, I'm also attaching a diff to fix vc_resize() in vt.c. In
> vc_resize(), if con_resize() exits with an error, the new console
> dimensions are not reset to the original, and memory from kmalloc() is
> not freed.
>
> Tony
>
> PATCH 1: fbcon_resize
> << begin >>
>
> diff -Naur linux-2.5.59/drivers/video/console/fbcon.c
> linux/drivers/video/console/fbcon.c ---
> linux-2.5.59/drivers/video/console/fbcon.c 2003-01-20 08:19:50.000000000
> +0000 +++ linux/drivers/video/console/fbcon.c 2003-01-20 08:37:06.000000000
> +0000 @@ -1870,23 +1870,35 @@
> }
>
>
> -static int fbcon_resize(struct vc_data *vc, unsigned int width,
> - unsigned int height)
> + static int fbcon_resize(struct vc_data *vc, unsigned int width,
> + unsigned int height)
> {
> struct display *p = &fb_display[vc->vc_num];
> struct fb_info *info = p->fb_info;
> struct fb_var_screeninfo var = info->var;
> - int err;
> -
> - var.xres = width * vc->vc_font.width;
> - var.yres = height * vc->vc_font.height;
> - var.activate = FB_ACTIVATE_NOW;
> -
> - err = fb_set_var(&var, info);
> - return (err || var.xres != info->var.xres ||
> - var.yres != info->var.yres) ?
> - -EINVAL : 0;
> -
> + int err; int x_diff, y_diff;
> + int fw = vc->vc_font.width;
> + int fh = vc->vc_font.height;
> +
> + var.xres = width * fw;
> + var.yres = height * fh;
> + x_diff = info->var.xres - var.xres;
> + y_diff = info->var.yres - var.yres;
> + if (x_diff < 0 || x_diff > fw ||
> + (y_diff < 0 || y_diff > fh)) {
> + var.activate = FB_ACTIVATE_TEST;
> + err = fb_set_var(&var, info);
> + if (err || width != var.xres/fw ||
> + height != var.yres/fh)
> + return -EINVAL;
> + DPRINTK("resize now %ix%i\n", var.xres, var.yres);
> + var.activate = FB_ACTIVATE_NOW;
> + fb_set_var(&var, info);
> + p->vrows = info->var.yres_virtual/fh;
> + } else {
> + DPRINTK("prevent resize\n");
> + }
> + return 0;
> }
>
> static int fbcon_switch(struct vc_data *vc)
> << end >>
>
> PATCH 2: vc_resize
>
> << begin >>
>
> diff -Naur linux-2.5.59/drivers/char/vt.c linux/drivers/char/vt.c
> --- linux-2.5.59/drivers/char/vt.c 2003-01-20 08:18:11.000000000 +0000
> +++ linux/drivers/char/vt.c 2003-01-20 08:17:37.000000000 +0000
> @@ -732,6 +732,10 @@
> if (new_cols == video_num_columns && new_rows == video_num_lines)
> return 0;
>
> + err = resize_screen(currcons, new_cols, new_rows);
> + if (err)
> + return err;
> +
> newscreen = (unsigned short *) kmalloc(new_screen_size, GFP_USER);
> if (!newscreen)
> return -ENOMEM;
> @@ -746,9 +750,6 @@
> video_size_row = new_row_size;
> screenbuf_size = new_screen_size;
>
> - err = resize_screen(currcons, new_cols, new_rows);
> - if (err)
> - return err;
>
> rlth = min(old_row_size, new_row_size);
> rrem = new_row_size - rlth;
> << end >>
>
>
>
> -------------------------------------------------------
> This SF.NET email is sponsored by: FREE SSL Guide from Thawte
> are you planning your Web Server Security? Click here to get a FREE
> Thawte SSL guide and find the answers to all your SSL security issues.
> http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0026en
> _______________________________________________
> Linux-fbdev-devel mailing list
> Linux-fbdev-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
-------------------------------------------------------
This SF.net email is sponsored by: Scholarships for Techies!
Can't afford IT training? All 2003 ictp students receive scholarships.
Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more.
www.ictp.com/training/sourceforge.asp
next prev parent reply other threads:[~2003-01-22 17:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-19 18:56 Fwd: [PATCH 2.5.59] fix for fbcon.c Alexander Kern
2003-01-20 8:45 ` Antonino Daplas
2003-01-22 17:45 ` Alexander Kern [this message]
2003-02-17 11:33 ` Antonino Daplas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200301221845.16983.alex.kern@gmx.de \
--to=alex.kern@gmx.de \
--cc=adaplas@pol.net \
--cc=linux-fbdev-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).