diff options
Diffstat (limited to 'mm/vmalloc.c')
| -rw-r--r-- | mm/vmalloc.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index d3a9c5368257..ddf87145cc49 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -68,12 +68,12 @@ static inline void vunmap_pud_range(pgd_t *pgd, unsigned long addr, | |||
| 68 | } while (pud++, addr = next, addr != end); | 68 | } while (pud++, addr = next, addr != end); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | void unmap_vm_area(struct vm_struct *area) | 71 | void unmap_kernel_range(unsigned long addr, unsigned long size) |
| 72 | { | 72 | { |
| 73 | pgd_t *pgd; | 73 | pgd_t *pgd; |
| 74 | unsigned long next; | 74 | unsigned long next; |
| 75 | unsigned long addr = (unsigned long) area->addr; | 75 | unsigned long start = addr; |
| 76 | unsigned long end = addr + area->size; | 76 | unsigned long end = addr + size; |
| 77 | 77 | ||
| 78 | BUG_ON(addr >= end); | 78 | BUG_ON(addr >= end); |
| 79 | pgd = pgd_offset_k(addr); | 79 | pgd = pgd_offset_k(addr); |
| @@ -84,7 +84,12 @@ void unmap_vm_area(struct vm_struct *area) | |||
| 84 | continue; | 84 | continue; |
| 85 | vunmap_pud_range(pgd, addr, next); | 85 | vunmap_pud_range(pgd, addr, next); |
| 86 | } while (pgd++, addr = next, addr != end); | 86 | } while (pgd++, addr = next, addr != end); |
| 87 | flush_tlb_kernel_range((unsigned long) area->addr, end); | 87 | flush_tlb_kernel_range(start, end); |
| 88 | } | ||
| 89 | |||
| 90 | static void unmap_vm_area(struct vm_struct *area) | ||
| 91 | { | ||
| 92 | unmap_kernel_range((unsigned long)area->addr, area->size); | ||
| 88 | } | 93 | } |
| 89 | 94 | ||
| 90 | static int vmap_pte_range(pmd_t *pmd, unsigned long addr, | 95 | static int vmap_pte_range(pmd_t *pmd, unsigned long addr, |
