aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/cirrusfb.c
diff options
context:
space:
mode:
authorKrzysztof Helt <krzysztof.h1@wp.pl>2009-03-31 15:25:12 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-01 08:59:28 -0700
commitbc5d8ac02f24d68efe8e267c96dd75c0531009ab (patch)
tree0876991e7a956532428169a10939588e9399a395 /drivers/video/cirrusfb.c
parent9e848062533207130667f6eaa748549367ccbedf (diff)
downloadkernel_samsung_aries-bc5d8ac02f24d68efe8e267c96dd75c0531009ab.zip
kernel_samsung_aries-bc5d8ac02f24d68efe8e267c96dd75c0531009ab.tar.gz
kernel_samsung_aries-bc5d8ac02f24d68efe8e267c96dd75c0531009ab.tar.bz2
cirrusfb: fix error paths in cirrusfb_xxx_register()
Balance iomap and iounmap and alloc and free calls in case of error druing device register (probing). Signed-off-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>
Diffstat (limited to 'drivers/video/cirrusfb.c')
-rw-r--r--drivers/video/cirrusfb.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c
index a2a09b3..ffc514d 100644
--- a/drivers/video/cirrusfb.c
+++ b/drivers/video/cirrusfb.c
@@ -2090,8 +2090,6 @@ static int __devinit cirrusfb_register(struct fb_info *info)
err_dealloc_cmap:
fb_dealloc_cmap(&info->cmap);
- cinfo->unmap(info);
- framebuffer_release(info);
return err;
}
@@ -2328,18 +2326,15 @@ static int __devinit cirrusfb_zorro_register(struct zorro_dev *z,
zorro_set_drvdata(z, info);
ret = cirrusfb_register(info);
- if (ret) {
- if (btype == BT_PICASSO4) {
- iounmap(info->screen_base);
- iounmap(cinfo->regbase - 0x600000);
- } else if (board_addr > 0x01000000)
- iounmap(info->screen_base);
- }
- return ret;
+ if (!ret)
+ return 0;
+
+ if (btype == BT_PICASSO4 || board_addr > 0x01000000)
+ iounmap(info->screen_base);
err_unmap_regbase:
- /* Parental advisory: explicit hack */
- iounmap(cinfo->regbase - 0x600000);
+ if (btype == BT_PICASSO4)
+ iounmap(cinfo->regbase - 0x600000);
err_release_region:
release_region(board_addr, board_size);
err_release_fb: