summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmol Lad <amol@verismonetworks.com>2006-12-08 11:40:02 +0100
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-08 17:29:04 +0100
commitef26dd7ffa305382aabcd95fd574d01808a65c41 (patch)
tree1ef1fc0938d8d8e1225a219634e64fa3cd86aed6
parent[PATCH] sl82c105: straighten up IDE control/status register caching (diff)
downloadlinux-ef26dd7ffa305382aabcd95fd574d01808a65c41.tar.xz
linux-ef26dd7ffa305382aabcd95fd574d01808a65c41.zip
[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>
-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 64378959dd7b..b9fb6fb3600d 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;
}