On Fri, Feb 06, 2009 at 06:54:14PM +0100, Andrea Arcangeli wrote: > + if (is_cow_mapping(vm_flags)) { > + if (pte_write(pte)) { > + ptep_set_wrprotect(src_mm, addr, src_pte); > + pte = pte_wrprotect(pte); > + } While working on the mainline version that will definitely require a tlb flush here if forcecow/PageGUP is set, I just realized to provide an atomic per-page copy in the fork_pre_cow an explicit tlb flush is needed in the pre-gup-fast version too. if (is_cow_mapping(vm_flags)) { if (pte_write(pte)) { ptep_set_wrprotect(src_mm, addr, src_pte); pte = pte_wrprotect(pte); if (forcecow) flush_tlb_page(src_vma, addr); } } However to flush the 'src_mm' I feel I can't pass the 'dst_vma' that fork is passing to copy_page_range. OTOH the dst_vma is needed to be passed to the fork_pre_cow which is why fork.c was changed in the patch to pass dst_vma instead of src_vma. So I think I want to avoid all further confusion if the 'vma' belongs to the src_mm or the dst_mm by passing both src_vma, and dst_vma from fork to copy_page_tables. In the pre-gup-fast version the tlb flush is mostly a nitpick and it would never lead to any practical issue, but for mostly theoretical reasons it may be good idea to have the per-page atomic copy there too, comments? -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html