From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Samuel Rydh <samuel@ibrium.se>
Cc: Linux Frame Buffer Device Development
<linux-fbdev@vuser.vu.union.edu>,
Linux/PPC Development <linuxppc-dev@lists.linuxppc.org>,
olh@suse.de
Subject: Re: Video driver bug
Date: Sat, 7 Oct 2000 19:56:29 +0200 (CEST) [thread overview]
Message-ID: <Pine.LNX.4.10.10010071939260.398-100000@cassiopeia.home> (raw)
In-Reply-To: <20001007133851.A994@ibrium.se>
On Sat, 7 Oct 2000, Samuel Rydh wrote:
> Certain 2.4 video drivers (aty128, aty, platinum, tdfx, iga)
> appear to be buggy. More specifically, the problem is the
> following:
>
> In the set_disp function, info->dispsw is initialized and disp->dispsw
> is given the address of info->dispsw:
>
> static void aty128_set_disp(..)
> {
> switch(bpp) {
> case 8:
> info->dispsw = accel ? fbcon_aty128_8 : fbcon_cfb8;
> disp->dispsw = &info->dispsw;
> break;
> ...
> }
>
> The problem is that the info struct is shared by all virtual consoles.
> Thus if the video mode is set on a console which is not active, the
> active console will be affected too. This typically results in a kernel
> panic (the wrong set of console output functions is used).
You're right. *_set_disp() may be called for non-active VTs, changing
info->dispsw for the active VT.
> This problem is observable if one starts MOL from the console. MOL
> changes the video mode on an inactive console in order to extract
> certain video mode parameters (like rowbytes).
>
> One way to fix the bug is changing set_disp to the following:
>
> static void aty128_set_disp(..)
> {
> switch(bpp) {
> case 8:
> disp->dispsw = accel ? &fbcon_aty128_8 : &fbcon_cfb8;
> break;
> ...
> }
>
> This is how the code used to look like (before 2.3.43-pre5).
> Does anyone know why this was changed?
The 2.3.44 patch shows that this line was added to struct fb_info_aty128:
+ struct display_switch dispsw; /* for cursor and font */
While that comment isn't applicable to aty128fb, it is to atyfb (where it is
no longer present, probably it was removed in 2.1.x). When using a hardware
cursor, display_switch.{cursor,set_font} needs to be overridden, cfr.
if (info->cursor) {
info->dispsw.cursor = atyfb_cursor;
info->dispsw.set_font = atyfb_set_font;
}
in atyfb_set_disp().
I remember the original version changed the cursor and set_font fields of
disp->dispsw directly. Since this affected multiple ATI cards in your machine
(fbcon_aty* is shared), or even other video cards (disp->dispsw == fbcon_cfb*
if acceleration is disabled), I added the per-card copy of struct
display_switch to struct fb_info_aty.
Well, for aty128fb (which doesn't support a hardware cursor yet), the fix is
what you propose. However, for atyfb I see no simple solution, apart from
disabling the hardware cursor :-(
Any other takers?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
next prev parent reply other threads:[~2000-10-07 17:56 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-10-07 11:38 Video driver bug Samuel Rydh
2000-10-07 17:56 ` Geert Uytterhoeven [this message]
2000-10-07 18:50 ` Takashi Oe
2000-10-07 23:34 ` Samuel Rydh
2000-10-10 1:43 ` [linux-fbdev] " James Simmons
2000-10-10 8:04 ` Geert Uytterhoeven
2000-10-10 13:45 ` Geert Uytterhoeven
2000-10-11 3:18 ` James Simmons
2000-10-13 20:43 ` Benjamin Herrenschmidt
2000-10-13 22:42 ` Takashi Oe
2000-10-14 16:41 ` Geert Uytterhoeven
2000-10-17 0:22 ` James Simmons
2000-10-16 22:20 ` Samuel Rydh
2000-10-17 11:37 ` Geert Uytterhoeven
2000-10-18 4:09 ` James Simmons
2000-10-21 13:22 ` Samuel Rydh
2000-10-14 6:36 ` James Simmons
2000-10-14 10:09 ` Geert Uytterhoeven
2000-10-14 12:24 ` Samuel Rydh
2000-10-11 0:05 ` James Simmons
2000-10-10 19:53 ` Geert Uytterhoeven
2000-10-11 5:23 ` James Simmons
2000-10-14 16:21 ` Geert Uytterhoeven
2000-10-14 17:18 ` Benjamin Herrenschmidt
2000-10-15 11:38 ` Geert Uytterhoeven
2000-10-17 0:03 ` James Simmons
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=Pine.LNX.4.10.10010071939260.398-100000@cassiopeia.home \
--to=geert@linux-m68k.org \
--cc=linux-fbdev@vuser.vu.union.edu \
--cc=linuxppc-dev@lists.linuxppc.org \
--cc=olh@suse.de \
--cc=samuel@ibrium.se \
/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).