return wp_page_copy(vmf);
}
-static void unmap_mapping_range_vma(struct vm_area_struct *vma,
- unsigned long start_addr, unsigned long end_addr,
- struct zap_details *details)
-{
- struct mmu_gather tlb;
-
- tlb_gather_mmu(&tlb, vma->vm_mm);
- zap_page_range_single_batched(&tlb, vma, start_addr,
- end_addr - start_addr, details);
- tlb_finish_mmu(&tlb);
-}
-
static inline void unmap_mapping_range_tree(struct rb_root_cached *root,
pgoff_t first_index,
pgoff_t last_index,
{
struct vm_area_struct *vma;
pgoff_t vba, vea, zba, zea;
+ unsigned long start, size;
+ struct mmu_gather tlb;
vma_interval_tree_foreach(vma, root, first_index, last_index) {
vba = vma->vm_pgoff;
vea = vba + vma_pages(vma) - 1;
zba = max(first_index, vba);
zea = min(last_index, vea);
+ start = ((zba - vba) << PAGE_SHIFT) + vma->vm_start;
+ size = (zea - zba + 1) << PAGE_SHIFT;
- unmap_mapping_range_vma(vma,
- ((zba - vba) << PAGE_SHIFT) + vma->vm_start,
- ((zea - vba + 1) << PAGE_SHIFT) + vma->vm_start,
- details);
+ tlb_gather_mmu(&tlb, vma->vm_mm);
+ zap_page_range_single_batched(&tlb, vma, start, size, details);
+ tlb_finish_mmu(&tlb);
}
}