|
@@ -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);
|