linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Antonino A. Daplas" <adaplas@hotpop.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Linux Fbdev development list
	<linux-fbdev-devel@lists.sourceforge.net>
Subject: [PATCH 1/8] fbcon: Do not touch hardware if vc_mode != KD_TEXT
Date: Tue, 2 Nov 2004 19:46:06 +0800	[thread overview]
Message-ID: <200411021946.06302.adaplas@hotpop.com> (raw)

The frambuffer console is still writing to the graphics hardware even if the
hardware is not owned anymore by the console.  This can lead to crashes with
some hardware.

A trace of the source indicates that it comes from almost anywhere, anytime.

The fix is to return immediately if vc_mode != KD_TEXT.  The test is placed in 
the following functions if not already present.

fbcon_cursor()
fbcon_putcs()
fbcon_clear()
fbcon_bmove() 
fbcon_blank() 

Tony

Signed-off-by: Antonino Daplas <adaplas@pol.net>

 fbcon.c |   29 +++++++++++++++++++----------
 1 files changed, 19 insertions(+), 10 deletions(-)

diff -Nru a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
--- a/drivers/video/console/fbcon.c	2004-10-30 19:10:42 +08:00
+++ b/drivers/video/console/fbcon.c	2004-11-02 18:58:15 +08:00
@@ -983,6 +983,9 @@
 	if (info->state != FBINFO_STATE_RUNNING)
 		return;
 
+	if (vt_cons[vc->vc_num]->vc_mode != KD_TEXT)
+		return;
+
 	if (!height || !width)
 		return;
 
@@ -1007,6 +1010,7 @@
 
 	if (!info->fbops->fb_blank && console_blanked)
 		return;
+
 	if (info->state != FBINFO_STATE_RUNNING)
 		return;
 
@@ -1042,6 +1046,9 @@
 	int y = real_y(p, vc->vc_y);
  	int c = scr_readw((u16 *) vc->vc_pos);
 
+	if (vt_cons[vc->vc_num]->vc_mode != KD_TEXT)
+		return;
+
 	ops->cursor_flash = 1;
 	if (mode & CM_SOFTBACK) {
 		mode &= ~CM_SOFTBACK;
@@ -1690,6 +1697,9 @@
 	if (!info->fbops->fb_blank && console_blanked)
 		return;
 
+	if (vt_cons[vc->vc_num]->vc_mode != KD_TEXT)
+		return;
+
 	if (!width || !height)
 		return;
 
@@ -1952,6 +1962,7 @@
 	struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
 	struct fbcon_ops *ops = (struct fbcon_ops *) info->fbcon_par;
 	struct display *p = &fb_display[vc->vc_num];
+	int retval = 0;
 
 	if (mode_switch) {
 		struct fb_var_screeninfo var = info->var;
@@ -1968,19 +1979,16 @@
 		if (info->flags & FBINFO_MISC_MODESWITCHLATE)
 			info->flags |= FBINFO_MISC_MODESWITCH;
 
-		if (blank) {
-			fbcon_cursor(vc, CM_ERASE);
-			return 0;
-		}
-
-		if (!(info->flags & FBINFO_MISC_MODESWITCHLATE)) {
+		if (!blank && !(info->flags & FBINFO_MISC_MODESWITCHLATE)) {
 			var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
 			fb_set_var(info, &var);
 		}
+
+		return 0;
 	}
 
-	fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW);
 	ops->cursor_flash = (!blank);
+	fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW);
 
 	if (!info->fbops->fb_blank) {
 		if (blank) {
@@ -2001,9 +2009,10 @@
 			vc->vc_video_erase_char = oldc;
 		} else
 			update_screen(vc->vc_num);
-		return 0;
-	} else
-		return fb_blank(info, blank);
+	} else if (vt_cons[vc->vc_num]->vc_mode == KD_TEXT)
+		retval = fb_blank(info, blank);
+
+	return retval;
 }
 
 static void fbcon_free_font(struct display *p)




-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click

             reply	other threads:[~2004-11-02 11:46 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-02 11:46 Antonino A. Daplas [this message]
2004-11-02 22:27 ` [PATCH 1/8] fbcon: Do not touch hardware if vc_mode != KD_TEXT Benjamin Herrenschmidt
2004-11-02 23:27   ` Antonino A. Daplas
2004-11-03  2:30   ` Antonino A. Daplas
2004-11-03 23:52     ` Andrew Morton
2004-11-04  0:16       ` Benjamin Herrenschmidt
2004-11-04  0:57         ` Antonino A. Daplas
2004-11-04  0:58       ` Antonino A. 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=200411021946.06302.adaplas@hotpop.com \
    --to=adaplas@hotpop.com \
    --cc=akpm@osdl.org \
    --cc=benh@kernel.crashing.org \
    --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).