diff options
author | Krzysztof Helt <krzysztof.h1@wp.pl> | 2009-03-31 15:25:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 08:59:28 -0700 |
commit | bc5d8ac02f24d68efe8e267c96dd75c0531009ab (patch) | |
tree | 0876991e7a956532428169a10939588e9399a395 /drivers/video/cirrusfb.c | |
parent | 9e848062533207130667f6eaa748549367ccbedf (diff) | |
download | kernel_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.c | 19 |
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: |