diff options
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/mm/memory.c b/mm/memory.c index f7b6c9859796..1e77da6d82c1 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1295,7 +1295,7 @@ static void unmap_page_range(struct mmu_gather *tlb, | |||
1295 | 1295 | ||
1296 | static void unmap_single_vma(struct mmu_gather *tlb, | 1296 | static void unmap_single_vma(struct mmu_gather *tlb, |
1297 | struct vm_area_struct *vma, unsigned long start_addr, | 1297 | struct vm_area_struct *vma, unsigned long start_addr, |
1298 | unsigned long end_addr, unsigned long *nr_accounted, | 1298 | unsigned long end_addr, |
1299 | struct zap_details *details) | 1299 | struct zap_details *details) |
1300 | { | 1300 | { |
1301 | unsigned long start = max(vma->vm_start, start_addr); | 1301 | unsigned long start = max(vma->vm_start, start_addr); |
@@ -1307,9 +1307,6 @@ static void unmap_single_vma(struct mmu_gather *tlb, | |||
1307 | if (end <= vma->vm_start) | 1307 | if (end <= vma->vm_start) |
1308 | return; | 1308 | return; |
1309 | 1309 | ||
1310 | if (vma->vm_flags & VM_ACCOUNT) | ||
1311 | *nr_accounted += (end - start) >> PAGE_SHIFT; | ||
1312 | |||
1313 | if (unlikely(is_pfn_mapping(vma))) | 1310 | if (unlikely(is_pfn_mapping(vma))) |
1314 | untrack_pfn_vma(vma, 0, 0); | 1311 | untrack_pfn_vma(vma, 0, 0); |
1315 | 1312 | ||
@@ -1339,7 +1336,6 @@ static void unmap_single_vma(struct mmu_gather *tlb, | |||
1339 | * @vma: the starting vma | 1336 | * @vma: the starting vma |
1340 | * @start_addr: virtual address at which to start unmapping | 1337 | * @start_addr: virtual address at which to start unmapping |
1341 | * @end_addr: virtual address at which to end unmapping | 1338 | * @end_addr: virtual address at which to end unmapping |
1342 | * @nr_accounted: Place number of unmapped pages in vm-accountable vma's here | ||
1343 | * | 1339 | * |
1344 | * Unmap all pages in the vma list. | 1340 | * Unmap all pages in the vma list. |
1345 | * | 1341 | * |
@@ -1354,13 +1350,13 @@ static void unmap_single_vma(struct mmu_gather *tlb, | |||
1354 | */ | 1350 | */ |
1355 | void unmap_vmas(struct mmu_gather *tlb, | 1351 | void unmap_vmas(struct mmu_gather *tlb, |
1356 | struct vm_area_struct *vma, unsigned long start_addr, | 1352 | struct vm_area_struct *vma, unsigned long start_addr, |
1357 | unsigned long end_addr, unsigned long *nr_accounted) | 1353 | unsigned long end_addr) |
1358 | { | 1354 | { |
1359 | struct mm_struct *mm = vma->vm_mm; | 1355 | struct mm_struct *mm = vma->vm_mm; |
1360 | 1356 | ||
1361 | mmu_notifier_invalidate_range_start(mm, start_addr, end_addr); | 1357 | mmu_notifier_invalidate_range_start(mm, start_addr, end_addr); |
1362 | for ( ; vma && vma->vm_start < end_addr; vma = vma->vm_next) | 1358 | for ( ; vma && vma->vm_start < end_addr; vma = vma->vm_next) |
1363 | unmap_single_vma(tlb, vma, start_addr, end_addr, nr_accounted, NULL); | 1359 | unmap_single_vma(tlb, vma, start_addr, end_addr, NULL); |
1364 | mmu_notifier_invalidate_range_end(mm, start_addr, end_addr); | 1360 | mmu_notifier_invalidate_range_end(mm, start_addr, end_addr); |
1365 | } | 1361 | } |
1366 | 1362 | ||
@@ -1379,14 +1375,13 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start, | |||
1379 | struct mm_struct *mm = vma->vm_mm; | 1375 | struct mm_struct *mm = vma->vm_mm; |
1380 | struct mmu_gather tlb; | 1376 | struct mmu_gather tlb; |
1381 | unsigned long end = start + size; | 1377 | unsigned long end = start + size; |
1382 | unsigned long nr_accounted = 0; | ||
1383 | 1378 | ||
1384 | lru_add_drain(); | 1379 | lru_add_drain(); |
1385 | tlb_gather_mmu(&tlb, mm, 0); | 1380 | tlb_gather_mmu(&tlb, mm, 0); |
1386 | update_hiwater_rss(mm); | 1381 | update_hiwater_rss(mm); |
1387 | mmu_notifier_invalidate_range_start(mm, start, end); | 1382 | mmu_notifier_invalidate_range_start(mm, start, end); |
1388 | for ( ; vma && vma->vm_start < end; vma = vma->vm_next) | 1383 | for ( ; vma && vma->vm_start < end; vma = vma->vm_next) |
1389 | unmap_single_vma(&tlb, vma, start, end, &nr_accounted, details); | 1384 | unmap_single_vma(&tlb, vma, start, end, details); |
1390 | mmu_notifier_invalidate_range_end(mm, start, end); | 1385 | mmu_notifier_invalidate_range_end(mm, start, end); |
1391 | tlb_finish_mmu(&tlb, start, end); | 1386 | tlb_finish_mmu(&tlb, start, end); |
1392 | } | 1387 | } |
@@ -1406,13 +1401,12 @@ static void zap_page_range_single(struct vm_area_struct *vma, unsigned long addr | |||
1406 | struct mm_struct *mm = vma->vm_mm; | 1401 | struct mm_struct *mm = vma->vm_mm; |
1407 | struct mmu_gather tlb; | 1402 | struct mmu_gather tlb; |
1408 | unsigned long end = address + size; | 1403 | unsigned long end = address + size; |
1409 | unsigned long nr_accounted = 0; | ||
1410 | 1404 | ||
1411 | lru_add_drain(); | 1405 | lru_add_drain(); |
1412 | tlb_gather_mmu(&tlb, mm, 0); | 1406 | tlb_gather_mmu(&tlb, mm, 0); |
1413 | update_hiwater_rss(mm); | 1407 | update_hiwater_rss(mm); |
1414 | mmu_notifier_invalidate_range_start(mm, address, end); | 1408 | mmu_notifier_invalidate_range_start(mm, address, end); |
1415 | unmap_single_vma(&tlb, vma, address, end, &nr_accounted, details); | 1409 | unmap_single_vma(&tlb, vma, address, end, details); |
1416 | mmu_notifier_invalidate_range_end(mm, address, end); | 1410 | mmu_notifier_invalidate_range_end(mm, address, end); |
1417 | tlb_finish_mmu(&tlb, address, end); | 1411 | tlb_finish_mmu(&tlb, address, end); |
1418 | } | 1412 | } |