|
@@ -68,12 +68,12 @@ static inline void vunmap_pud_range(pgd_t *pgd, unsigned long addr,
|
|
|
} while (pud++, addr = next, addr != end);
|
|
|
}
|
|
|
|
|
|
-void unmap_vm_area(struct vm_struct *area)
|
|
|
+void unmap_kernel_range(unsigned long addr, unsigned long size)
|
|
|
{
|
|
|
pgd_t *pgd;
|
|
|
unsigned long next;
|
|
|
- unsigned long addr = (unsigned long) area->addr;
|
|
|
- unsigned long end = addr + area->size;
|
|
|
+ unsigned long start = addr;
|
|
|
+ unsigned long end = addr + size;
|
|
|
|
|
|
BUG_ON(addr >= end);
|
|
|
pgd = pgd_offset_k(addr);
|
|
@@ -84,7 +84,12 @@ void unmap_vm_area(struct vm_struct *area)
|
|
|
continue;
|
|
|
vunmap_pud_range(pgd, addr, next);
|
|
|
} while (pgd++, addr = next, addr != end);
|
|
|
- flush_tlb_kernel_range((unsigned long) area->addr, end);
|
|
|
+ flush_tlb_kernel_range(start, end);
|
|
|
+}
|
|
|
+
|
|
|
+static void unmap_vm_area(struct vm_struct *area)
|
|
|
+{
|
|
|
+ unmap_kernel_range((unsigned long)area->addr, area->size);
|
|
|
}
|
|
|
|
|
|
static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
|