aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/ioremap.c
diff options
context:
space:
mode:
authorHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2009-03-27 16:14:38 +0100
committerHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2009-03-27 16:14:38 +0100
commitb92efa9abffc4a634cd2e7a0f81f8aa6310d67c9 (patch)
tree9847508d9b8d4e585f90db4a453bfbc3700c997e /arch/arm/mm/ioremap.c
parenta16fffdd8eb95ebab7dc22414896fe6493951e0e (diff)
parentbe0ea69674ed95e1e98cb3687a241badc756d228 (diff)
downloadkernel_samsung_tuna-b92efa9abffc4a634cd2e7a0f81f8aa6310d67c9.zip
kernel_samsung_tuna-b92efa9abffc4a634cd2e7a0f81f8aa6310d67c9.tar.gz
kernel_samsung_tuna-b92efa9abffc4a634cd2e7a0f81f8aa6310d67c9.tar.bz2
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into avr32-arch
Diffstat (limited to 'arch/arm/mm/ioremap.c')
-rw-r--r--arch/arm/mm/ioremap.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index 18373f7..9f88dd3 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -138,7 +138,7 @@ void __check_kvm_seq(struct mm_struct *mm)
*/
static void unmap_area_sections(unsigned long virt, unsigned long size)
{
- unsigned long addr = virt, end = virt + (size & ~SZ_1M);
+ unsigned long addr = virt, end = virt + (size & ~(SZ_1M - 1));
pgd_t *pgd;
flush_cache_vunmap(addr, end);
@@ -337,10 +337,7 @@ void __iounmap(volatile void __iomem *io_addr)
void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr);
#ifndef CONFIG_SMP
struct vm_struct **p, *tmp;
-#endif
- unsigned int section_mapping = 0;
-#ifndef CONFIG_SMP
/*
* If this is a section based mapping we need to handle it
* specially as the VM subsystem does not know how to handle
@@ -352,11 +349,8 @@ void __iounmap(volatile void __iomem *io_addr)
for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) {
if ((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) {
if (tmp->flags & VM_ARM_SECTION_MAPPING) {
- *p = tmp->next;
unmap_area_sections((unsigned long)tmp->addr,
tmp->size);
- kfree(tmp);
- section_mapping = 1;
}
break;
}
@@ -364,7 +358,6 @@ void __iounmap(volatile void __iomem *io_addr)
write_unlock(&vmlist_lock);
#endif
- if (!section_mapping)
- vunmap(addr);
+ vunmap(addr);
}
EXPORT_SYMBOL(__iounmap);