From: Christoph Lameter Make nr_pte a mm_counter. nr_pte is also protected by the page_table_lock like rss and anon_rss. This patch changes all accesses to nr_pte to use the macros provided for that purpose. Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton --- arch/um/kernel/skas/mmu.c | 2 +- fs/proc/task_mmu.c | 2 +- include/linux/sched.h | 3 ++- kernel/fork.c | 2 +- mm/memory.c | 4 ++-- mm/mmap.c | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff -puN arch/um/kernel/skas/mmu.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl arch/um/kernel/skas/mmu.c --- devel/arch/um/kernel/skas/mmu.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/arch/um/kernel/skas/mmu.c 2005-08-18 20:17:13.000000000 -0700 @@ -115,7 +115,7 @@ int init_new_context_skas(struct task_st if(ret) goto out_free; - mm->nr_ptes--; + dec_mm_counter(mm, nr_ptes); if((cur_mm != NULL) && (cur_mm != &init_mm)) mm_id->u.pid = copy_context_skas0(stack, diff -puN fs/proc/task_mmu.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl fs/proc/task_mmu.c --- devel/fs/proc/task_mmu.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/fs/proc/task_mmu.c 2005-08-18 20:17:13.000000000 -0700 @@ -27,7 +27,7 @@ char *task_mem(struct mm_struct *mm, cha get_mm_counter(mm, rss) << (PAGE_SHIFT-10), data << (PAGE_SHIFT-10), mm->stack_vm << (PAGE_SHIFT-10), text, lib, - (PTRS_PER_PTE*sizeof(pte_t)*mm->nr_ptes) >> 10); + (PTRS_PER_PTE*sizeof(pte_t)*get_mm_counter(mm, nr_ptes)) >> 10); return buffer; } diff -puN include/linux/sched.h~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl include/linux/sched.h --- devel/include/linux/sched.h~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/include/linux/sched.h 2005-08-18 20:17:13.000000000 -0700 @@ -238,9 +238,10 @@ struct mm_struct { unsigned long start_brk, brk, start_stack; unsigned long arg_start, arg_end, env_start, env_end; unsigned long total_vm, locked_vm, shared_vm; - unsigned long exec_vm, stack_vm, reserved_vm, def_flags, nr_ptes; + unsigned long exec_vm, stack_vm, reserved_vm, def_flags; /* Special counters protected by the page_table_lock */ + mm_counter_t _nr_ptes; mm_counter_t _rss; mm_counter_t _anon_rss; diff -puN kernel/fork.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl kernel/fork.c --- devel/kernel/fork.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/kernel/fork.c 2005-08-18 20:17:13.000000000 -0700 @@ -320,7 +320,7 @@ static struct mm_struct * mm_init(struct init_rwsem(&mm->mmap_sem); INIT_LIST_HEAD(&mm->mmlist); mm->core_waiters = 0; - mm->nr_ptes = 0; + set_mm_counter(mm, nr_ptes, 0); spin_lock_init(&mm->page_table_lock); rwlock_init(&mm->ioctx_list_lock); mm->ioctx_list = NULL; diff -puN mm/memory.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl mm/memory.c --- devel/mm/memory.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/mm/memory.c 2005-08-18 20:17:13.000000000 -0700 @@ -116,7 +116,7 @@ static void free_pte_range(struct mmu_ga pmd_clear(pmd); pte_free_tlb(tlb, page); dec_page_state(nr_page_table_pages); - tlb->mm->nr_ptes--; + dec_mm_counter(tlb->mm, nr_ptes); } static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, @@ -299,7 +299,7 @@ pte_t fastcall *pte_alloc_map(struct mm_ pte_free(new); goto out; } - mm->nr_ptes++; + inc_mm_counter(mm, nr_ptes); inc_page_state(nr_page_table_pages); pmd_populate(mm, pmd, new); } diff -puN mm/mmap.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl mm/mmap.c --- devel/mm/mmap.c~use-mm_counter-macros-for-nr_pte-since-its-also-under-ptl 2005-08-18 20:17:13.000000000 -0700 +++ devel-akpm/mm/mmap.c 2005-08-18 20:17:13.000000000 -0700 @@ -1969,7 +1969,7 @@ void exit_mmap(struct mm_struct *mm) vma = next; } - BUG_ON(mm->nr_ptes > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT); + BUG_ON(get_mm_counter(mm, nr_ptes) > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT); } /* Insert vm structure into process list sorted by address _