linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 1/7] fbdev: Don't show logo if driver or
@ 2007-04-09 15:29 Jean Delvare
  0 siblings, 0 replies; only message in thread
From: Jean Delvare @ 2007-04-09 15:29 UTC (permalink / raw)
  To: Antonino Daplas; +Cc: Andrew Morton, Linux Fbdev development list

(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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-04-09 15:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-09 15:29 [PATCH 1/7] fbdev: Don't show logo if driver or Jean Delvare

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