From: Nick Piggin Remap ZERO_PAGE ptes when remapping memory. This is currently just an optimisation for MIPS, which is the only architecture with multiple zero pages - it now retains the mapping it needs for good cache performance, and as well do_wp_page is now able to always correctly detect and optimise zero page COW faults. This change is required in order to be able to detect whether a pte points to a ZERO_PAGE using only its (pte, vaddr) pair. Signed-off-by: Nick Piggin Signed-off-by: Andrew Morton --- mm/mremap.c | 4 ++++ 1 files changed, 4 insertions(+) diff -puN mm/mremap.c~mm-remap-zero_page-mappings mm/mremap.c --- 25/mm/mremap.c~mm-remap-zero_page-mappings Tue Jul 26 13:29:24 2005 +++ 25-akpm/mm/mremap.c Tue Jul 26 13:29:24 2005 @@ -141,6 +141,10 @@ move_one_page(struct vm_area_struct *vma if (dst) { pte_t pte; pte = ptep_clear_flush(vma, old_addr, src); + /* ZERO_PAGE can be dependant on virtual addr */ + if (pfn_valid(pte_pfn(pte)) && + pte_page(pte) == ZERO_PAGE(old_addr)) + pte = pte_wrprotect(mk_pte(ZERO_PAGE(new_addr), new_vma->vm_page_prot)); set_pte_at(mm, new_addr, dst, pte); } else error = -ENOMEM; _