linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jean Delvare <khali@linux-fr.org>
To: Antonino Daplas <adaplas@gmail.com>
Cc: Andrew Morton <akpm@osdl.org>,
	Linux Fbdev development list
	<linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: [PATCH 1/7] fbdev: Don't show logo if driver or
Date: Mon, 9 Apr 2007 17:29:55 +0200	[thread overview]
Message-ID: <20070409172955.6ef76537@hyperion.delvare> (raw)

(Sorry for the referenceless reply, but I am not subscribed to
linux-fbdev-devel.)

> It was always intended for the logo to be drawn only if both fbcon and the
> driver that is mapped to it are both compiled statically.  Currently, if fbcon
> is loaded prior to the driver, the logo is not shown.  Reverse the order, and
> the code may attempt to draw the logo which is __initdata.  By accident, this
> bug is rarely seen because this method of loading the modules is not common
> and secondly, a code in fb_prepare_logo() that checks the height of the logo
> (now a random value) rarely succeeds.
> 
> Fix by drawing the logo only if both fbcon and the driver are statically
> compiled.
> 
> Signed-off-by: Antonino Daplas <adaplas@gmail.com>
> ---
> 
>  drivers/video/console/fbcon.c |   17 +++++++++++++++++
>  drivers/video/fbmem.c         |    6 ++++--
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
> index f1e3e3c..0d8e107 100644
> --- a/drivers/video/console/fbcon.c
> +++ b/drivers/video/console/fbcon.c
> @@ -107,7 +107,9 @@ static struct display fb_display[MAX_NR_
>  
>  static signed char con2fb_map[MAX_NR_CONSOLES];
>  static signed char con2fb_map_boot[MAX_NR_CONSOLES];
> +#ifndef MODULE
>  static int logo_height;
> +#endif
>  static int logo_lines;
>  /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO
>     enums.  */
> @@ -576,6 +578,13 @@ static int fbcon_takeover(int show_logo)
>  	return err;
>  }
>  
> +#ifdef MODULE
> +static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
> +			       int cols, int rows, int new_cols, int new_rows)
> +{
> +	logo_shown = FBCON_LOGO_DONTSHOW;
> +}
> +#else
>  static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
>  			       int cols, int rows, int new_cols, int new_rows)
>  {
> @@ -584,6 +593,11 @@ static void fbcon_prepare_logo(struct vc
>  	int cnt, erase = vc->vc_video_erase_char, step;
>  	unsigned short *save = NULL, *r, *q;
>  
> +	if (info->flags & FBINFO_MODULE) {
> +		logo_shown = FBCON_LOGO_DONTSHOW;
> +		goto done;
> +	}
> +
>  	/*
>  	 * remove underline attribute from erase character
>  	 * if black and white framebuffer.
> @@ -654,7 +668,10 @@ static void fbcon_prepare_logo(struct vc
>  		logo_shown = FBCON_LOGO_DRAW;
>  		vc->vc_top = logo_lines;
>  	}
> +
> +done:
>  }
> +#endif /* MODULE */

This fails to compile here:
drivers/video/console/fbcon.c: In function 'fbcon_prepare_logo':
drivers/video/console/fbcon.c:668: error: label at end of compound statement

And indeed, a simple "return" instead of "goto done" sounds more
logical.

>  
>  #ifdef CONFIG_FB_TILEBLITTING
>  static void set_blitting_type(struct vc_data *vc, struct fb_info *info)
> diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
> index 45f3839..08c292d 100644
> --- a/drivers/video/fbmem.c
> +++ b/drivers/video/fbmem.c
> @@ -418,7 +418,8 @@ int fb_prepare_logo(struct fb_info *info
>  
>  	memset(&fb_logo, 0, sizeof(struct logo_data));
>  
> -	if (info->flags & FBINFO_MISC_TILEBLITTING)
> +	if (info->flags & FBINFO_MISC_TILEBLITTING ||
> +	    info->flags & FBINFO_MODULE)
>  		return 0;
>  
>  	if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
> @@ -483,7 +484,8 @@ int fb_show_logo(struct fb_info *info, i
>  	struct fb_image image;
>  
>  	/* Return if the frame buffer is not mapped or suspended */
> -	if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING)
> +	if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING ||
> +	    info->flags & FBINFO_MODULE)
>  		return 0;
>  
>  	image.depth = 8;


-- 
Jean Delvare

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

                 reply	other threads:[~2007-04-09 15:30 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20070409172955.6ef76537@hyperion.delvare \
    --to=khali@linux-fr.org \
    --cc=adaplas@gmail.com \
    --cc=akpm@osdl.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).