diff options
author | Amol Lad <amol@verismonetworks.com> | 2006-09-21 08:42:43 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2006-09-22 05:24:31 -0400 |
commit | 25f0c659fe64832d8ee06aa623fffaad708dcf8b (patch) | |
tree | b5740156ac2ce5e39aaaba32ddb21b03379abb48 /drivers/mtd/maps/cstm_mips_ixx.c | |
parent | dd8e9ed6ed544e2b924429d29cd2a6b55590109b (diff) |
ioremap balanced with iounmap for drivers/mtd subsystem
ioremap must be balanced by an iounmap and failing to do so can result
in a memory leak.
Tested (compilation only) with:
- allmodconfig
- Modifying drivers/mtd/maps/Kconfig and drivers/mtd/nand/Kconfig to
make sure that the changed file is compiling without warning
Signed-off-by: Amol Lad <amol@verismonetworks.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'drivers/mtd/maps/cstm_mips_ixx.c')
-rw-r--r-- | drivers/mtd/maps/cstm_mips_ixx.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/mtd/maps/cstm_mips_ixx.c b/drivers/mtd/maps/cstm_mips_ixx.c index aa56defb94c8..d6bef100d69a 100644 --- a/drivers/mtd/maps/cstm_mips_ixx.c +++ b/drivers/mtd/maps/cstm_mips_ixx.c | |||
@@ -171,7 +171,14 @@ int __init init_cstm_mips_ixx(void) | |||
171 | cstm_mips_ixx_map[i].phys = cstm_mips_ixx_board_desc[i].window_addr; | 171 | cstm_mips_ixx_map[i].phys = cstm_mips_ixx_board_desc[i].window_addr; |
172 | cstm_mips_ixx_map[i].virt = ioremap(cstm_mips_ixx_board_desc[i].window_addr, cstm_mips_ixx_board_desc[i].window_size); | 172 | cstm_mips_ixx_map[i].virt = ioremap(cstm_mips_ixx_board_desc[i].window_addr, cstm_mips_ixx_board_desc[i].window_size); |
173 | if (!cstm_mips_ixx_map[i].virt) { | 173 | if (!cstm_mips_ixx_map[i].virt) { |
174 | int j = 0; | ||
174 | printk(KERN_WARNING "Failed to ioremap\n"); | 175 | printk(KERN_WARNING "Failed to ioremap\n"); |
176 | for (j = 0; j < i; j++) { | ||
177 | if (cstm_mips_ixx_map[j].virt) { | ||
178 | iounmap((void *)cstm_mips_ixx_map[j].virt); | ||
179 | cstm_mips_ixx_map[j].virt = 0; | ||
180 | } | ||
181 | } | ||
175 | return -EIO; | 182 | return -EIO; |
176 | } | 183 | } |
177 | cstm_mips_ixx_map[i].name = cstm_mips_ixx_board_desc[i].name; | 184 | cstm_mips_ixx_map[i].name = cstm_mips_ixx_board_desc[i].name; |
@@ -204,8 +211,15 @@ int __init init_cstm_mips_ixx(void) | |||
204 | cstm_mips_ixx_map[i].map_priv_2 = (unsigned long)mymtd; | 211 | cstm_mips_ixx_map[i].map_priv_2 = (unsigned long)mymtd; |
205 | add_mtd_partitions(mymtd, parts, cstm_mips_ixx_board_desc[i].num_partitions); | 212 | add_mtd_partitions(mymtd, parts, cstm_mips_ixx_board_desc[i].num_partitions); |
206 | } | 213 | } |
207 | else | 214 | else { |
208 | return -ENXIO; | 215 | for (i = 0; i < PHYSMAP_NUMBER; i++) { |
216 | if (cstm_mips_ixx_map[i].virt) { | ||
217 | iounmap((void *)cstm_mips_ixx_map[i].virt); | ||
218 | cstm_mips_ixx_map[i].virt = 0; | ||
219 | } | ||
220 | } | ||
221 | return -ENXIO; | ||
222 | } | ||
209 | } | 223 | } |
210 | return 0; | 224 | return 0; |
211 | } | 225 | } |