From: Christoph Lameter <clameter@engr.sgi.com>

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 <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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
_