mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
stifb: check fb_alloc_cmap return value and handle failure properly
Signed-off-by: Andres Salomon <dilinger@debian.org> Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c23124277e
commit
175b39fb7e
@ -1262,24 +1262,25 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||||||
info->flags = FBINFO_DEFAULT;
|
info->flags = FBINFO_DEFAULT;
|
||||||
info->pseudo_palette = &fb->pseudo_palette;
|
info->pseudo_palette = &fb->pseudo_palette;
|
||||||
|
|
||||||
/* This has to been done !!! */
|
/* This has to be done !!! */
|
||||||
fb_alloc_cmap(&info->cmap, NR_PALETTE, 0);
|
if (fb_alloc_cmap(&info->cmap, NR_PALETTE, 0))
|
||||||
|
goto out_err1;
|
||||||
stifb_init_display(fb);
|
stifb_init_display(fb);
|
||||||
|
|
||||||
if (!request_mem_region(fix->smem_start, fix->smem_len, "stifb fb")) {
|
if (!request_mem_region(fix->smem_start, fix->smem_len, "stifb fb")) {
|
||||||
printk(KERN_ERR "stifb: cannot reserve fb region 0x%04lx-0x%04lx\n",
|
printk(KERN_ERR "stifb: cannot reserve fb region 0x%04lx-0x%04lx\n",
|
||||||
fix->smem_start, fix->smem_start+fix->smem_len);
|
fix->smem_start, fix->smem_start+fix->smem_len);
|
||||||
goto out_err1;
|
goto out_err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!request_mem_region(fix->mmio_start, fix->mmio_len, "stifb mmio")) {
|
if (!request_mem_region(fix->mmio_start, fix->mmio_len, "stifb mmio")) {
|
||||||
printk(KERN_ERR "stifb: cannot reserve sti mmio region 0x%04lx-0x%04lx\n",
|
printk(KERN_ERR "stifb: cannot reserve sti mmio region 0x%04lx-0x%04lx\n",
|
||||||
fix->mmio_start, fix->mmio_start+fix->mmio_len);
|
fix->mmio_start, fix->mmio_start+fix->mmio_len);
|
||||||
goto out_err2;
|
goto out_err3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (register_framebuffer(&fb->info) < 0)
|
if (register_framebuffer(&fb->info) < 0)
|
||||||
goto out_err3;
|
goto out_err4;
|
||||||
|
|
||||||
sti->info = info; /* save for unregister_framebuffer() */
|
sti->info = info; /* save for unregister_framebuffer() */
|
||||||
|
|
||||||
@ -1297,13 +1298,14 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
out_err3:
|
out_err4:
|
||||||
release_mem_region(fix->mmio_start, fix->mmio_len);
|
release_mem_region(fix->mmio_start, fix->mmio_len);
|
||||||
out_err2:
|
out_err3:
|
||||||
release_mem_region(fix->smem_start, fix->smem_len);
|
release_mem_region(fix->smem_start, fix->smem_len);
|
||||||
|
out_err2:
|
||||||
|
fb_dealloc_cmap(&info->cmap);
|
||||||
out_err1:
|
out_err1:
|
||||||
iounmap(info->screen_base);
|
iounmap(info->screen_base);
|
||||||
fb_dealloc_cmap(&info->cmap);
|
|
||||||
out_err0:
|
out_err0:
|
||||||
kfree(fb);
|
kfree(fb);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
Loading…
Reference in New Issue
Block a user