linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
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/

  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).