aboutsummaryrefslogtreecommitdiff
path: root/drivers/video/virgefb.c
diff options
context:
space:
mode:
authorAmol Lad <amol@verismonetworks.com>2006-12-08 02:40:02 -0800
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-08 08:29:04 -0800
commitef26dd7ffa305382aabcd95fd574d01808a65c41 (patch)
tree1ef1fc0938d8d8e1225a219634e64fa3cd86aed6 /drivers/video/virgefb.c
parentdd607d23ff4cc004da2986d0b264a972c6a2da3e (diff)
[PATCH] ioremap balanced with iounmap for drivers/video/virgefb
ioremap must be balanced by an iounmap and failing to do so can result in a memory leak. Signed-off-by: Amol Lad <amol@verismonetworks.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/virgefb.c')
-rw-r--r--drivers/video/virgefb.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/video/virgefb.c b/drivers/video/virgefb.c
index 64378959dd7..b9fb6fb3600 100644
--- a/drivers/video/virgefb.c
+++ b/drivers/video/virgefb.c
@@ -1799,7 +1799,7 @@ int __init virgefb_init(void)
#warning release resources
printk(KERN_ERR "virgefb.c: register_framebuffer failed\n");
DPRINTK("EXIT\n");
- return -EINVAL;
+ goto out_unmap;
}
printk(KERN_INFO "fb%d: %s frame buffer device, using %ldK of video memory\n",
@@ -1809,6 +1809,21 @@ int __init virgefb_init(void)
DPRINTK("EXIT\n");
return 0;
+
+out_unmap:
+ if (board_addr >= 0x01000000) {
+ if (v_ram)
+ iounmap((void*)v_ram);
+ if (vgaio_regs)
+ iounmap(vgaio_regs);
+ if (mmio_regs)
+ iounmap(mmio_regs);
+ if (vcode_switch_base)
+ iounmap((void*)vcode_switch_base);
+ v_ram = vcode_switch_base = 0;
+ vgaio_regs = mmio_regs = NULL;
+ }
+ return -EINVAL;
}