539
540
541 if (vm_flags & VM_SHARED)
542 pte = pte_mkclean(pte);
543 pte = pte_mkold(pte);
544
545 page = vm_normal_page(vma, addr, pte);
546 if (page) {
547 get_page(page);
548 page_dup_rmap(page, vma, addr);
549 rss[!!PageAnon(page)]++;
550 }
551
552out_set_pte:
553 set_pte_at(dst_mm, addr, dst_pte, pte);
554}
555
556static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
557 pmd_t *dst_pmd, pmd_t *src_pmd, struct vm_area_struct *vma,
558 unsigned long addr, unsigned long end)
559{
560 pte_t *src_pte, *dst_pte;
561 spinlock_t *src_ptl, *dst_ptl;
562 int progress = 0;
563 int rss[2];
564
565again:
566 rss[1] = rss[0] = 0;
567 dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl);
568 if (!dst_pte)
569 return -ENOMEM;
570 src_pte = pte_offset_map_nested(src_pmd, addr);
571 src_ptl = pte_lockptr(src_mm, src_pmd);
572 spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
573 arch_enter_lazy_mmu_mode();
574
575 do {
576
577
578
579