linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Lameter <clameter@sgi.com>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Hugh Dickins <hugh@veritas.com>,
	akpm@osdl.org, Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Nick Piggin <nickpiggin@yahoo.com.au>,
	linux-mm@kvack.org, linux-ia64@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: page fault scalability patch V12 [1/7]: Reduce use of thepage_table_lock
Date: Wed, 1 Dec 2004 15:42:05 -0800 (PST)	[thread overview]
Message-ID: <Pine.LNX.4.58.0412011541100.5721@schroedinger.engr.sgi.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0412011539170.5721@schroedinger.engr.sgi.com>

Changelog
        * Increase parallelism in SMP configurations by deferring
          the acquisition of page_table_lock in handle_mm_fault
        * Anonymous memory page faults bypass the page_table_lock
          through the use of atomic page table operations
        * Swapper does not set pte to empty in transition to swap
        * Simulate atomic page table operations using the
          page_table_lock if an arch does not define
          __HAVE_ARCH_ATOMIC_TABLE_OPS. This still provides
          a performance benefit since the page_table_lock
          is held for shorter periods of time.

Signed-off-by: Christoph Lameter <clameter@sgi.com

Index: linux-2.6.9/mm/memory.c
===================================================================
--- linux-2.6.9.orig/mm/memory.c	2004-11-23 10:06:03.000000000 -0800
+++ linux-2.6.9/mm/memory.c	2004-11-23 10:07:55.000000000 -0800
@@ -1330,8 +1330,7 @@
 }

 /*
- * We hold the mm semaphore and the page_table_lock on entry and
- * should release the pagetable lock on exit..
+ * We hold the mm semaphore
  */
 static int do_swap_page(struct mm_struct * mm,
 	struct vm_area_struct * vma, unsigned long address,
@@ -1343,15 +1342,13 @@
 	int ret = VM_FAULT_MINOR;

 	pte_unmap(page_table);
-	spin_unlock(&mm->page_table_lock);
 	page = lookup_swap_cache(entry);
 	if (!page) {
  		swapin_readahead(entry, address, vma);
  		page = read_swap_cache_async(entry, vma, address);
 		if (!page) {
 			/*
-			 * Back out if somebody else faulted in this pte while
-			 * we released the page table lock.
+			 * Back out if somebody else faulted in this pte
 			 */
 			spin_lock(&mm->page_table_lock);
 			page_table = pte_offset_map(pmd, address);
@@ -1374,8 +1371,7 @@
 	lock_page(page);

 	/*
-	 * Back out if somebody else faulted in this pte while we
-	 * released the page table lock.
+	 * Back out if somebody else faulted in this pte
 	 */
 	spin_lock(&mm->page_table_lock);
 	page_table = pte_offset_map(pmd, address);
@@ -1422,14 +1418,12 @@
 }

 /*
- * We are called with the MM semaphore and page_table_lock
- * spinlock held to protect against concurrent faults in
- * multithreaded programs.
+ * We are called with the MM semaphore held.
  */
 static int
 do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
 		pte_t *page_table, pmd_t *pmd, int write_access,
-		unsigned long addr)
+		unsigned long addr, pte_t orig_entry)
 {
 	pte_t entry;
 	struct page * page = ZERO_PAGE(addr);
@@ -1441,7 +1435,6 @@
 	if (write_access) {
 		/* Allocate our own private page. */
 		pte_unmap(page_table);
-		spin_unlock(&mm->page_table_lock);

 		if (unlikely(anon_vma_prepare(vma)))
 			goto no_mem;
@@ -1450,30 +1443,37 @@
 			goto no_mem;
 		clear_user_highpage(page, addr);

-		spin_lock(&mm->page_table_lock);
 		page_table = pte_offset_map(pmd, addr);

-		if (!pte_none(*page_table)) {
-			pte_unmap(page_table);
-			page_cache_release(page);
-			spin_unlock(&mm->page_table_lock);
-			goto out;
-		}
-		mm->rss++;
 		entry = maybe_mkwrite(pte_mkdirty(mk_pte(page,
 							 vma->vm_page_prot)),
 				      vma);
-		lru_cache_add_active(page);
 		mark_page_accessed(page);
-		page_add_anon_rmap(page, vma, addr);
 	}

-	set_pte(page_table, entry);
+	/* update the entry */
+	if (!ptep_cmpxchg(vma, addr, page_table, orig_entry, entry)) {
+		if (write_access) {
+			pte_unmap(page_table);
+			page_cache_release(page);
+		}
+		goto out;
+	}
+	if (write_access) {
+		/*
+		 * These two functions must come after the cmpxchg
+		 * because if the page is on the LRU then try_to_unmap may come
+		 * in and unmap the pte.
+		 */
+		lru_cache_add_active(page);
+		page_add_anon_rmap(page, vma, addr);
+		mm->rss++;
+
+	}
 	pte_unmap(page_table);

 	/* No need to invalidate - it was non-present before */
 	update_mmu_cache(vma, addr, entry);
-	spin_unlock(&mm->page_table_lock);
 out:
 	return VM_FAULT_MINOR;
 no_mem:
@@ -1489,12 +1489,12 @@
  * As this is called only for pages that do not currently exist, we
  * do not need to flush old virtual caches or the TLB.
  *
- * This is called with the MM semaphore held and the page table
- * spinlock held. Exit with the spinlock released.
+ * This is called with the MM semaphore held.
  */
 static int
 do_no_page(struct mm_struct *mm, struct vm_area_struct *vma,
-	unsigned long address, int write_access, pte_t *page_table, pmd_t *pmd)
+	unsigned long address, int write_access, pte_t *page_table,
+        pmd_t *pmd, pte_t orig_entry)
 {
 	struct page * new_page;
 	struct address_space *mapping = NULL;
@@ -1505,9 +1505,8 @@

 	if (!vma->vm_ops || !vma->vm_ops->nopage)
 		return do_anonymous_page(mm, vma, page_table,
-					pmd, write_access, address);
+					pmd, write_access, address, orig_entry);
 	pte_unmap(page_table);
-	spin_unlock(&mm->page_table_lock);

 	if (vma->vm_file) {
 		mapping = vma->vm_file->f_mapping;
@@ -1605,7 +1604,7 @@
  * nonlinear vmas.
  */
 static int do_file_page(struct mm_struct * mm, struct vm_area_struct * vma,
-	unsigned long address, int write_access, pte_t *pte, pmd_t *pmd)
+	unsigned long address, int write_access, pte_t *pte, pmd_t *pmd, pte_t entry)
 {
 	unsigned long pgoff;
 	int err;
@@ -1618,13 +1617,12 @@
 	if (!vma->vm_ops || !vma->vm_ops->populate ||
 			(write_access && !(vma->vm_flags & VM_SHARED))) {
 		pte_clear(pte);
-		return do_no_page(mm, vma, address, write_access, pte, pmd);
+		return do_no_page(mm, vma, address, write_access, pte, pmd, entry);
 	}

 	pgoff = pte_to_pgoff(*pte);

 	pte_unmap(pte);
-	spin_unlock(&mm->page_table_lock);

 	err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE, vma->vm_page_prot, pgoff, 0);
 	if (err == -ENOMEM)
@@ -1643,49 +1641,40 @@
  * with external mmu caches can use to update those (ie the Sparc or
  * PowerPC hashed page tables that act as extended TLBs).
  *
- * Note the "page_table_lock". It is to protect against kswapd removing
- * pages from under us. Note that kswapd only ever _removes_ pages, never
- * adds them. As such, once we have noticed that the page is not present,
- * we can drop the lock early.
- *
- * The adding of pages is protected by the MM semaphore (which we hold),
- * so we don't need to worry about a page being suddenly been added into
- * our VM.
- *
- * We enter with the pagetable spinlock held, we are supposed to
- * release it when done.
+ * Note that kswapd only ever _removes_ pages, never adds them.
+ * We need to insure to handle that case properly.
  */
 static inline int handle_pte_fault(struct mm_struct *mm,
 	struct vm_area_struct * vma, unsigned long address,
 	int write_access, pte_t *pte, pmd_t *pmd)
 {
 	pte_t entry;
+	pte_t new_entry;

 	entry = *pte;
 	if (!pte_present(entry)) {
-		/*
-		 * If it truly wasn't present, we know that kswapd
-		 * and the PTE updates will not touch it later. So
-		 * drop the lock.
-		 */
 		if (pte_none(entry))
-			return do_no_page(mm, vma, address, write_access, pte, pmd);
+			return do_no_page(mm, vma, address, write_access, pte, pmd, entry);
 		if (pte_file(entry))
-			return do_file_page(mm, vma, address, write_access, pte, pmd);
+			return do_file_page(mm, vma, address, write_access, pte, pmd, entry);
 		return do_swap_page(mm, vma, address, pte, pmd, entry, write_access);
 	}

+	/*
+	 * This is the case in which we only update some bits in the pte.
+	 */
+	new_entry = pte_mkyoung(entry);
 	if (write_access) {
-		if (!pte_write(entry))
+		if (!pte_write(entry)) {
+			/* do_wp_page expects us to hold the page_table_lock */
+			spin_lock(&mm->page_table_lock);
 			return do_wp_page(mm, vma, address, pte, pmd, entry);
-
-		entry = pte_mkdirty(entry);
+		}
+		new_entry = pte_mkdirty(new_entry);
 	}
-	entry = pte_mkyoung(entry);
-	ptep_set_access_flags(vma, address, pte, entry, write_access);
-	update_mmu_cache(vma, address, entry);
+	if (ptep_cmpxchg(vma, address, pte, entry, new_entry))
+		update_mmu_cache(vma, address, new_entry);
 	pte_unmap(pte);
-	spin_unlock(&mm->page_table_lock);
 	return VM_FAULT_MINOR;
 }

@@ -1703,22 +1692,45 @@

 	inc_page_state(pgfault);

-	if (is_vm_hugetlb_page(vma))
+	if (unlikely(is_vm_hugetlb_page(vma)))
 		return VM_FAULT_SIGBUS;	/* mapping truncation does this. */

 	/*
-	 * We need the page table lock to synchronize with kswapd
-	 * and the SMP-safe atomic PTE updates.
+	 * We rely on the mmap_sem and the SMP-safe atomic PTE updates.
+	 * to synchronize with kswapd
 	 */
-	spin_lock(&mm->page_table_lock);
-	pmd = pmd_alloc(mm, pgd, address);
+	if (unlikely(pgd_none(*pgd))) {
+		pmd_t *new = pmd_alloc_one(mm, address);
+		if (!new)
+			return VM_FAULT_OOM;
+
+		/* Insure that the update is done in an atomic way */
+		if (!pgd_test_and_populate(mm, pgd, new))
+			pmd_free(new);
+	}
+
+	pmd = pmd_offset(pgd, address);
+
+	if (likely(pmd)) {
+		pte_t *pte;
+
+		if (!pmd_present(*pmd)) {
+			struct page *new;

-	if (pmd) {
-		pte_t * pte = pte_alloc_map(mm, pmd, address);
-		if (pte)
+			new = pte_alloc_one(mm, address);
+			if (!new)
+				return VM_FAULT_OOM;
+
+			if (!pmd_test_and_populate(mm, pmd, new))
+				pte_free(new);
+			else
+				inc_page_state(nr_page_table_pages);
+		}
+
+		pte = pte_offset_map(pmd, address);
+		if (likely(pte))
 			return handle_pte_fault(mm, vma, address, write_access, pte, pmd);
 	}
-	spin_unlock(&mm->page_table_lock);
 	return VM_FAULT_OOM;
 }

Index: linux-2.6.9/include/asm-generic/pgtable.h
===================================================================
--- linux-2.6.9.orig/include/asm-generic/pgtable.h	2004-10-18 14:53:46.000000000 -0700
+++ linux-2.6.9/include/asm-generic/pgtable.h	2004-11-23 10:06:12.000000000 -0800
@@ -134,4 +134,60 @@
 #define pgd_offset_gate(mm, addr)	pgd_offset(mm, addr)
 #endif

+#ifndef __HAVE_ARCH_ATOMIC_TABLE_OPS
+/*
+ * If atomic page table operations are not available then use
+ * the page_table_lock to insure some form of locking.
+ * Note thought that low level operations as well as the
+ * page_table_handling of the cpu may bypass all locking.
+ */
+
+#ifndef __HAVE_ARCH_PTEP_CMPXCHG
+#define ptep_cmpxchg(__vma, __addr, __ptep, __oldval, __newval)		\
+({									\
+	int __rc;							\
+	spin_lock(&__vma->vm_mm->page_table_lock);			\
+	__rc = pte_same(*(__ptep), __oldval);				\
+	if (__rc) set_pte(__ptep, __newval);				\
+	spin_unlock(&__vma->vm_mm->page_table_lock);			\
+	__rc;								\
+})
+#endif
+
+#ifndef __HAVE_ARCH_PGP_TEST_AND_POPULATE
+#define pgd_test_and_populate(__mm, __pgd, __pmd)			\
+({									\
+	int __rc;							\
+	spin_lock(&__mm->page_table_lock);				\
+	__rc = !pgd_present(*(__pgd));					\
+	if (__rc) pgd_populate(__mm, __pgd, __pmd);			\
+	spin_unlock(&__mm->page_table_lock);				\
+	__rc;								\
+})
+#endif
+
+#ifndef __HAVE_PMD_TEST_AND_POPULATE
+#define pmd_test_and_populate(__mm, __pmd, __page)			\
+({									\
+	int __rc;							\
+	spin_lock(&__mm->page_table_lock);				\
+	__rc = !pmd_present(*(__pmd));					\
+	if (__rc) pmd_populate(__mm, __pmd, __page);			\
+	spin_unlock(&__mm->page_table_lock);				\
+	__rc;								\
+})
+#endif
+
+#endif
+
+#ifndef __HAVE_ARCH_PTEP_XCHG_FLUSH
+#define ptep_xchg_flush(__vma, __address, __ptep, __pteval)		\
+({									\
+	pte_t __p = __pte(xchg(&pte_val(*(__ptep)), pte_val(__pteval)));\
+	flush_tlb_page(__vma, __address);				\
+	__p;								\
+})
+
+#endif
+
 #endif /* _ASM_GENERIC_PGTABLE_H */
Index: linux-2.6.9/mm/rmap.c
===================================================================
--- linux-2.6.9.orig/mm/rmap.c	2004-11-23 10:06:03.000000000 -0800
+++ linux-2.6.9/mm/rmap.c	2004-11-23 10:06:12.000000000 -0800
@@ -424,7 +424,10 @@
  * @vma:	the vm area in which the mapping is added
  * @address:	the user virtual address mapped
  *
- * The caller needs to hold the mm->page_table_lock.
+ * The caller needs to hold the mm->page_table_lock if page
+ * is pointing to something that is known by the vm.
+ * The lock does not need to be held if page is pointing
+ * to a newly allocated page.
  */
 void page_add_anon_rmap(struct page *page,
 	struct vm_area_struct *vma, unsigned long address)
@@ -568,11 +571,6 @@

 	/* Nuke the page table entry. */
 	flush_cache_page(vma, address);
-	pteval = ptep_clear_flush(vma, address, pte);
-
-	/* Move the dirty bit to the physical page now the pte is gone. */
-	if (pte_dirty(pteval))
-		set_page_dirty(page);

 	if (PageAnon(page)) {
 		swp_entry_t entry = { .val = page->private };
@@ -587,11 +585,15 @@
 			list_add(&mm->mmlist, &init_mm.mmlist);
 			spin_unlock(&mmlist_lock);
 		}
-		set_pte(pte, swp_entry_to_pte(entry));
+		pteval = ptep_xchg_flush(vma, address, pte, swp_entry_to_pte(entry));
 		BUG_ON(pte_file(*pte));
 		mm->anon_rss--;
-	}
+	} else
+		pteval = ptep_clear_flush(vma, address, pte);

+	/* Move the dirty bit to the physical page now the pte is gone. */
+	if (pte_dirty(pteval))
+		set_page_dirty(page);
 	mm->rss--;
 	page_remove_rmap(page);
 	page_cache_release(page);
@@ -678,15 +680,21 @@
 		if (ptep_clear_flush_young(vma, address, pte))
 			continue;

-		/* Nuke the page table entry. */
 		flush_cache_page(vma, address);
-		pteval = ptep_clear_flush(vma, address, pte);
+		/*
+		 * There would be a race here with handle_mm_fault and do_anonymous_page
+		 * which  bypasses the page_table_lock if we would zap the pte before
+		 * putting something into it. On the other hand we need to
+		 * have the dirty flag setting at the time we replaced the value.
+		 */

 		/* If nonlinear, store the file page offset in the pte. */
 		if (page->index != linear_page_index(vma, address))
-			set_pte(pte, pgoff_to_pte(page->index));
+			pteval = ptep_xchg_flush(vma, address, pte, pgoff_to_pte(page->index));
+		else
+			pteval = ptep_get_and_clear(pte);

-		/* Move the dirty bit to the physical page now the pte is gone. */
+		/* Move the dirty bit to the physical page now that the pte is gone. */
 		if (pte_dirty(pteval))
 			set_page_dirty(page);



  reply	other threads:[~2004-12-01 23:47 UTC|newest]

Thread overview: 286+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.4.44.0411061527440.3567-100000@localhost.localdomain>
     [not found] ` <Pine.LNX.4.58.0411181126440.30385@schroedinger.engr.sgi.com>
     [not found]   ` <Pine.LNX.4.58.0411181715280.834@schroedinger.engr.sgi.com>
     [not found]     ` <419D581F.2080302@yahoo.com.au>
     [not found]       ` <Pine.LNX.4.58.0411181835540.1421@schroedinger.engr.sgi.com>
     [not found]         ` <419D5E09.20805@yahoo.com.au>
     [not found]           ` <Pine.LNX.4.58.0411181921001.1674@schroedinger.engr.sgi.com>
     [not found]             ` <1100848068.25520.49.camel@gaston>
2004-11-19 19:42               ` page fault scalability patch V11 [0/7]: overview Christoph Lameter
2004-11-19 19:43                 ` page fault scalability patch V11 [1/7]: sloppy rss Christoph Lameter
2004-11-19 20:50                   ` Hugh Dickins
2004-11-20  1:29                     ` Christoph Lameter
2004-11-22 15:00                       ` Hugh Dickins
2004-11-22 21:50                         ` deferred rss update instead of " Christoph Lameter
2004-11-22 22:11                           ` Andrew Morton
2004-11-22 22:13                             ` Christoph Lameter
2004-11-22 22:17                               ` Benjamin Herrenschmidt
2004-11-22 22:45                               ` Andrew Morton
2004-11-22 22:48                                 ` Christoph Lameter
2004-11-22 23:09                                   ` Nick Piggin
2004-11-22 23:13                                     ` Christoph Lameter
2004-11-22 23:16                                   ` Andrew Morton
2004-11-22 23:19                                     ` Christoph Lameter
2004-11-22 22:22                           ` Linus Torvalds
2004-11-22 22:27                             ` Christoph Lameter
2004-11-22 22:40                               ` Linus Torvalds
2004-12-01 23:41                                 ` page fault scalability patch V12 [0/7]: Overview and performance tests Christoph Lameter
2004-12-01 23:42                                   ` Christoph Lameter [this message]
2004-12-01 23:42                                   ` page fault scalability patch V12 [2/7]: atomic pte operations for ia64 Christoph Lameter
2004-12-01 23:43                                   ` page fault scalability patch V12 [3/7]: universal cmpxchg for i386 Christoph Lameter
2004-12-01 23:43                                   ` page fault scalability patch V12 [4/7]: atomic pte operations " Christoph Lameter
2004-12-01 23:44                                   ` page fault scalability patch V12 [5/7]: atomic pte operations for x86_64 Christoph Lameter
2004-12-01 23:45                                   ` page fault scalability patch V12 [6/7]: atomic pte operations for s390 Christoph Lameter
2004-12-01 23:45                                   ` page fault scalability patch V12 [7/7]: Split counter for rss Christoph Lameter
2005-01-04 19:35                                     ` page fault scalability patch V14 [0/7]: Overview Christoph Lameter
2005-01-04 19:35                                       ` page fault scalability patch V14 [1/7]: Avoid taking page_table_lock Christoph Lameter
2005-01-04 19:36                                       ` page fault scalability patch V14 [2/7]: ia64 atomic pte operations Christoph Lameter
2005-01-04 19:37                                       ` page fault scalability patch V14 [3/7]: i386 universal cmpxchg Christoph Lameter
2005-01-05 11:51                                         ` Roman Zippel
2005-01-04 19:37                                       ` page fault scalability patch V14 [4/7]: i386 atomic pte operations Christoph Lameter
2005-01-04 19:38                                       ` page fault scalability patch V14 [5/7]: x86_64 " Christoph Lameter
2005-01-04 19:46                                         ` Andi Kleen
2005-01-04 19:58                                           ` Christoph Lameter
2005-01-04 20:21                                             ` Andi Kleen
2005-01-04 20:32                                               ` Christoph Lameter
2005-01-11 17:39                                           ` page table lock patch V15 [0/7]: overview Christoph Lameter
2005-01-11 17:40                                             ` page table lock patch V15 [1/7]: Reduce use of page table lock Christoph Lameter
2005-01-11 17:41                                             ` page table lock patch V15 [2/7]: ia64 atomic pte operations Christoph Lameter
2005-01-11 17:41                                             ` page table lock patch V15 [3/7]: i386 universal cmpxchg Christoph Lameter
2005-01-11 17:42                                             ` page table lock patch V15 [4/7]: i386 atomic pte operations Christoph Lameter
2005-01-11 17:43                                             ` page table lock patch V15 [5/7]: x86_64 " Christoph Lameter
2005-01-11 17:43                                             ` page table lock patch V15 [6/7]: s390 " Christoph Lameter
2005-01-11 17:44                                             ` page table lock patch V15 [7/7]: Split RSS counter Christoph Lameter
2005-01-12  5:59                                             ` page table lock patch V15 [0/7]: overview Nick Piggin
2005-01-12  9:42                                               ` Andrew Morton
2005-01-12 12:29                                                 ` Marcelo Tosatti
2005-01-12 12:43                                                 ` Hugh Dickins
2005-01-12 21:22                                                   ` Hugh Dickins
2005-01-12 23:52                                                     ` Christoph Lameter
2005-01-13  2:52                                                       ` Hugh Dickins
2005-01-13 17:05                                                         ` Christoph Lameter
2005-01-12 16:39                                                 ` Christoph Lameter
2005-01-12 16:49                                                   ` Christoph Hellwig
2005-01-12 17:37                                                     ` Christoph Lameter
2005-01-12 17:41                                                       ` Christoph Hellwig
2005-01-12 17:52                                                         ` Christoph Lameter
2005-01-12 18:04                                                           ` Christoph Hellwig
2005-01-12 18:20                                                           ` Andrew Walrond
2005-01-12 18:43                                                   ` Andrew Morton
2005-01-12 19:06                                                     ` Christoph Lameter
2005-01-14  3:39                                                       ` Roman Zippel
2005-01-14  4:14                                                         ` Andi Kleen
2005-01-14 12:02                                                           ` Roman Zippel
2005-01-12 23:16                                                     ` Nick Piggin
2005-01-12 23:30                                                       ` Andrew Morton
2005-01-12 23:50                                                         ` Nick Piggin
2005-01-12 23:54                                                           ` Christoph Lameter
2005-01-13  0:10                                                             ` Nick Piggin
2005-01-13  0:16                                                               ` Christoph Lameter
2005-01-13  0:42                                                                 ` Nick Piggin
2005-01-13 22:19                                                                   ` Peter Chubb
2005-01-13  3:18                                                                 ` Andi Kleen
2005-01-13 17:11                                                                   ` Christoph Lameter
2005-01-13 17:25                                                                     ` Linus Torvalds
2005-01-13 18:02                                                                     ` Andi Kleen
2005-01-13 18:16                                                                       ` Christoph Lameter
2005-01-13 20:17                                                                         ` Andi Kleen
2005-01-14  1:09                                                                       ` Christoph Lameter
2005-01-14  4:39                                                                         ` Andi Kleen
2005-01-14  4:52                                                                           ` page table lock patch V15 [0/7]: overview II Andi Kleen
2005-01-14  4:59                                                                             ` Nick Piggin
2005-01-14 10:47                                                                               ` Andi Kleen
2005-01-14 10:57                                                                                 ` Nick Piggin
2005-01-14 11:11                                                                                   ` Andi Kleen
2005-01-14 16:57                                                                                     ` Christoph Lameter
2005-01-14  4:54                                                                           ` page table lock patch V15 [0/7]: overview Nick Piggin
2005-01-14 10:46                                                                             ` Andi Kleen
2005-01-14 16:52                                                                           ` Christoph Lameter
2005-01-14 17:01                                                                             ` Andi Kleen
2005-01-14 17:08                                                                               ` Christoph Lameter
2005-01-14 17:11                                                                                 ` Andi Kleen
2005-01-14 17:43                                                                               ` Linus Torvalds
2005-01-28 20:35                                                                               ` page fault scalability patch V16 [0/4]: redesign overview Christoph Lameter
2005-01-28 20:36                                                                                 ` page fault scalability patch V16 [1/4]: avoid intermittent clearing of ptes Christoph Lameter
2005-01-28 20:36                                                                                 ` page fault scalability patch V16 [2/4]: mm counter macros Christoph Lameter
2005-01-28 20:37                                                                                 ` page fault scalability patch V16 [3/4]: Drop page_table_lock in handle_mm_fault Christoph Lameter
2005-02-01  4:08                                                                                   ` Nick Piggin
2005-02-01 18:47                                                                                     ` Christoph Lameter
2005-02-01 19:01                                                                                     ` Christoph Lameter
2005-02-02  0:31                                                                                       ` Nick Piggin
2005-02-02  1:20                                                                                         ` Christoph Lameter
2005-02-02  1:41                                                                                           ` Nick Piggin
2005-02-02  2:49                                                                                             ` Christoph Lameter
2005-02-02  3:09                                                                                               ` Nick Piggin
2005-02-04  6:27                                                                                                 ` Nick Piggin
2005-02-17  0:57                                                                                         ` page fault scalability patchsets update: prezeroing, prefaulting and atomic operations Christoph Lameter
2005-02-24  6:04                                                                                           ` A Proposal for an MMU abstraction layer Christoph Lameter
2005-02-01  4:16                                                                                   ` page fault scalability patch V16 [3/4]: Drop page_table_lock in handle_mm_fault Nick Piggin
2005-02-01  8:20                                                                                     ` Kernel 2.4.21 hangs up baswaraj kasture
2005-02-01  8:35                                                                                       ` Arjan van de Ven
2005-02-01  9:03                                                                                       ` Christian Hildner
2005-02-07  6:14                                                                                         ` Kernel 2.4.21 gives kernel panic at boot time baswaraj kasture
2005-02-01 17:46                                                                                       ` Kernel 2.4.21 hangs up David Mosberger
2005-02-01 17:54                                                                                         ` Markus Trippelsdorf
2005-02-01 18:08                                                                                           ` David Mosberger
2005-02-01 18:44                                                                                     ` page fault scalability patch V16 [3/4]: Drop page_table_lock in handle_mm_fault Christoph Lameter
2005-01-28 20:38                                                                                 ` page fault scalability patch V16 [4/4]: Drop page_table_lock in do_anonymous_page Christoph Lameter
2005-01-13  3:09                                                           ` page table lock patch V15 [0/7]: overview Hugh Dickins
2005-01-13  3:46                                                             ` Nick Piggin
2005-01-13 17:14                                                               ` Christoph Lameter
2005-01-04 21:21                                         ` page fault scalability patch V14 [5/7]: x86_64 atomic pte operations Brian Gerst
2005-01-04 21:26                                           ` Christoph Lameter
2005-01-04 19:38                                       ` page fault scalability patch V14 [6/7]: s390 atomic pte operationsw Christoph Lameter
2005-01-04 19:39                                       ` page fault scalability patch V14 [7/7]: Split RSS counters Christoph Lameter
2004-12-02  0:10                                   ` page fault scalability patch V12 [0/7]: Overview and performance tests Linus Torvalds
2004-12-02  0:55                                     ` Andrew Morton
2004-12-02  1:46                                       ` Christoph Lameter
2004-12-02  6:21                                     ` Jeff Garzik
2004-12-02  6:34                                       ` Andrew Morton
2004-12-02  6:48                                         ` Jeff Garzik
2004-12-02  7:02                                           ` Andrew Morton
2004-12-02  7:26                                             ` Martin J. Bligh
2004-12-02  7:31                                               ` Jeff Garzik
2004-12-02 18:10                                                 ` cliff white
2004-12-02 18:17                                                   ` Gerrit Huizenga
2004-12-02 20:25                                                   ` linux-os
2004-12-08 17:24                                                   ` Anticipatory prefaulting in the page fault handler V1 Christoph Lameter
2004-12-08 17:33                                                     ` Jesse Barnes
2004-12-08 17:56                                                       ` Christoph Lameter
2004-12-08 18:33                                                         ` Jesse Barnes
2004-12-08 21:26                                                         ` David S. Miller
2004-12-08 21:42                                                           ` Linus Torvalds
2004-12-08 17:55                                                     ` Dave Hansen
2004-12-08 19:07                                                     ` Martin J. Bligh
2004-12-08 22:50                                                     ` Martin J. Bligh
2004-12-09 19:32                                                       ` Christoph Lameter
2004-12-10  2:13                                                         ` [OT:HUMOR] " Adam Heath
2004-12-13 14:30                                                         ` Akinobu Mita
2004-12-13 17:10                                                           ` Christoph Lameter
2004-12-13 22:16                                                             ` Martin J. Bligh
2004-12-14  1:32                                                               ` Anticipatory prefaulting in the page fault handler V2 Christoph Lameter
2004-12-14 19:31                                                                 ` Adam Litke
2004-12-15 19:03                                                                   ` Anticipatory prefaulting in the page fault handler V3 Christoph Lameter
2005-01-05  0:29                                                                   ` Anticipatory prefaulting in the page fault handler V4 Christoph Lameter
2004-12-14 12:24                                                             ` Anticipatory prefaulting in the page fault handler V1 Akinobu Mita
2004-12-14 15:25                                                               ` Akinobu Mita
2004-12-14 20:25                                                               ` Christoph Lameter
2004-12-09 10:57                                                     ` Pavel Machek
2004-12-09 11:32                                                       ` Nick Piggin
2004-12-09 17:05                                                       ` Christoph Lameter
2004-12-14 15:28                                                     ` Adam Litke
2004-12-02 18:43                                               ` page fault scalability patch V12 [0/7]: Overview and performance tests cliff white
2004-12-06 19:33                                                 ` Marcelo Tosatti
2004-12-02 16:24                                             ` Gerrit Huizenga
2004-12-02 17:34                                             ` cliff white
2004-12-02 19:48                                           ` Diego Calleja
2004-12-02 20:12                                             ` Jeff Garzik
2004-12-02 20:30                                               ` Diego Calleja
2004-12-02 21:08                                               ` Wichert Akkerman
2004-12-03  0:07                                               ` Francois Romieu
2004-12-02  7:00                                         ` Jeff Garzik
2004-12-02  7:05                                           ` Benjamin Herrenschmidt
2004-12-02  7:11                                             ` Jeff Garzik
2004-12-02 11:16                                               ` Benjamin Herrenschmidt
2004-12-02 14:30                                           ` Andy Warner
2005-01-06 23:40                                             ` Jeff Garzik
2004-12-02 18:27                                         ` Grant Grundler
2004-12-02 18:33                                           ` Andrew Morton
2004-12-02 18:36                                           ` Christoph Hellwig
2004-12-07 10:51                                         ` Pavel Machek
2004-12-09  8:00                                   ` Nick Piggin
2004-12-09 17:03                                     ` Christoph Lameter
2004-12-10  4:30                                       ` Nick Piggin
2004-12-09 18:37                                   ` Hugh Dickins
2004-12-09 22:02                                     ` page fault scalability patch V12: rss tasklist vs sloppy rss Christoph Lameter
2004-12-09 22:52                                       ` Andrew Morton
2004-12-09 22:52                                       ` William Lee Irwin III
2004-12-09 23:07                                         ` Christoph Lameter
2004-12-09 23:29                                           ` William Lee Irwin III
2004-12-09 23:49                                             ` Christoph Lameter
2004-12-10  4:26                                     ` page fault scalability patch V12 [0/7]: Overview and performance tests Nick Piggin
2004-12-10  4:54                                       ` Nick Piggin
2004-12-10  5:06                                         ` Benjamin Herrenschmidt
2004-12-10  5:19                                           ` Nick Piggin
2004-12-10 12:30                                             ` Hugh Dickins
2004-12-10 18:43                                     ` Christoph Lameter
2004-12-10 21:43                                       ` Hugh Dickins
2004-12-10 22:12                                         ` Andrew Morton
2004-12-10 23:52                                           ` Hugh Dickins
2004-12-11  0:18                                             ` Andrew Morton
2004-12-11  0:44                                               ` Hugh Dickins
2004-12-11  0:57                                                 ` Andrew Morton
2004-12-11  9:23                                                   ` Hugh Dickins
2004-12-12  7:54                                       ` Nick Piggin
2004-12-12  9:33                                         ` Hugh Dickins
2004-12-12  9:48                                           ` Nick Piggin
2004-12-12 21:24                                           ` William Lee Irwin III
2004-12-17  3:31                                             ` Christoph Lameter
2004-12-17  3:32                                             ` page fault scalability patch V13 [0/8]: Overview Christoph Lameter
2004-12-17  3:33                                               ` page fault scalability patch V13 [1/8]: Reduce the use of the page_table_lock Christoph Lameter
2004-12-17  3:33                                               ` page fault scalability patch V13 [2/8]: ia64 atomic pte operations Christoph Lameter
2004-12-17  3:34                                               ` page fault scalability patch V13 [3/8]: universal cmpxchg for i386 Christoph Lameter
2004-12-17  3:35                                               ` page fault scalability patch V13 [4/8]: atomic pte operations " Christoph Lameter
2004-12-17  3:36                                               ` page fault scalability patch V13 [5/8]: atomic pte operations for AMD64 Christoph Lameter
2004-12-17  3:38                                               ` page fault scalability patch V13 [7/8]: Split RSS Christoph Lameter
2004-12-17  3:39                                               ` page fault scalability patch V13 [8/8]: Prefaulting using ptep_cmpxchg Christoph Lameter
2004-12-17  5:55                                               ` page fault scalability patch V13 [0/8]: Overview Christoph Lameter
2004-12-10 20:03                                     ` pfault V12 : correction to tasklist rss Christoph Lameter
2004-12-10 21:24                                       ` Hugh Dickins
2004-12-10 21:38                                         ` Andrew Morton
2004-12-11  6:03                                           ` William Lee Irwin III
2004-11-22 22:32                             ` deferred rss update instead of sloppy rss Nick Piggin
2004-11-22 22:39                               ` Christoph Lameter
2004-11-22 23:14                                 ` Nick Piggin
2004-11-19 19:44                 ` page fault scalability patch V11 [2/7]: page fault handler optimizations Christoph Lameter
2004-11-19 19:44                 ` page fault scalability patch V11 [3/7]: ia64 atomic pte operations Christoph Lameter
2004-11-19 19:45                 ` page fault scalability patch V11 [4/7]: universal cmpxchg for i386 Christoph Lameter
2004-11-19 19:46                 ` page fault scalability patch V11 [5/7]: i386 atomic pte operations Christoph Lameter
2004-11-19 19:46                 ` page fault scalability patch V11 [6/7]: x86_64 " Christoph Lameter
2004-11-19 19:47                 ` page fault scalability patch V11 [7/7]: s390 " Christoph Lameter
2004-11-19 19:59                 ` page fault scalability patch V11 [0/7]: overview Linus Torvalds
2004-11-20  1:07                   ` Nick Piggin
2004-11-20  1:29                     ` Christoph Lameter
2004-11-20  1:45                       ` Nick Piggin
2004-11-20  1:58                       ` Linus Torvalds
2004-11-20  2:06                         ` Linus Torvalds
2004-11-20  1:56                     ` Linus Torvalds
2004-11-22 18:06                       ` Bill Davidsen
2004-11-20  2:03                   ` William Lee Irwin III
2004-11-20  2:25                     ` Nick Piggin
2004-11-20  2:41                       ` William Lee Irwin III
2004-11-20  2:46                         ` Nick Piggin
2004-11-20  3:37                     ` Nick Piggin
2004-11-20  3:55                       ` William Lee Irwin III
2004-11-20  4:03                         ` Nick Piggin
2004-11-20  4:06                           ` Nick Piggin
2004-11-20  4:23                           ` William Lee Irwin III
2004-11-20  4:29                             ` Nick Piggin
2004-11-20  5:38                               ` William Lee Irwin III
2004-11-20  5:50                                 ` Nick Piggin
2004-11-20  6:23                                   ` William Lee Irwin III
2004-11-20  6:49                                     ` Nick Piggin
2004-11-20  6:57                                       ` Andrew Morton
2004-11-20  7:04                                         ` Andrew Morton
2004-11-20  7:13                                         ` Nick Piggin
2004-11-20  8:00                                           ` William Lee Irwin III
2004-11-20 16:59                                           ` Martin J. Bligh
2004-11-20 17:14                                             ` Linus Torvalds
2004-11-20 19:08                                               ` William Lee Irwin III
2004-11-20 19:16                                                 ` Linus Torvalds
2004-11-20 19:33                                                   ` William Lee Irwin III
2004-11-22 17:44                                                     ` Christoph Lameter
2004-11-22 22:43                                                       ` William Lee Irwin III
2004-11-22 22:51                                                         ` Christoph Lameter
2004-11-23  2:25                                                           ` William Lee Irwin III
2004-11-20 20:25                                                 ` [OT] " Adam Heath
2004-11-20  7:15                                       ` William Lee Irwin III
2004-11-20  7:29                                         ` Nick Piggin
2004-11-20  7:45                                           ` touch_nmi_watchdog (was: page fault scalability patch V11 [0/7]: overview) Nick Piggin
2004-11-20  7:57                                           ` page fault scalability patch V11 [0/7]: overview Nick Piggin
2004-11-20  8:25                                             ` William Lee Irwin III
2004-11-20  2:04                 ` William Lee Irwin III
2004-11-20  2:18                   ` Nick Piggin
2004-11-20  2:34                     ` William Lee Irwin III
2004-11-20  2:40                       ` Nick Piggin
2004-11-20  3:04                         ` William Lee Irwin III
2004-11-20  3:14                           ` Nick Piggin
2004-11-20  3:43                             ` William Lee Irwin III
2004-11-20  3:58                               ` Nick Piggin
2004-11-20  4:01                                 ` William Lee Irwin III
2004-11-20  4:34                                 ` Robin Holt
2004-11-20  3:33                           ` Robin Holt
2004-11-20  4:24                             ` William Lee Irwin III
2004-11-20  2:06                 ` Robin Holt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.58.0412011541100.5721@schroedinger.engr.sgi.com \
    --to=clameter@sgi.com \
    --cc=akpm@osdl.org \
    --cc=benh@kernel.crashing.org \
    --cc=hugh@veritas.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nickpiggin@yahoo.com.au \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).