From: Christoph Lameter <clameter@sgi.com>
To: akpm@linux-foundation.org
Cc: Andrea Arcangeli <andrea@qumranet.com>, Robin Holt <holt@sgi.com>
Cc: Avi Kivity <avi@qumranet.com>, Izik Eidus <izike@qumranet.com>
Cc: kvm-devel@lists.sourceforge.net
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>, general@lists.openfabrics.org
Cc: Steve Wise <swise@opengridcomputing.com>
Cc: Roland Dreier <rdreier@cisco.com>
Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
Cc: steiner@sgi.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org
Cc: daniel.blueman@quadrics.com
Subject: [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges
Date: Thu, 14 Feb 2008 22:49:01 -0800 [thread overview]
Message-ID: <20080215064932.620773824@sgi.com> (raw)
In-Reply-To: 20080215064859.384203497@sgi.com
[-- Attachment #1: mmu_invalidate_range_callbacks --]
[-- Type: text/plain, Size: 11235 bytes --]
The invalidation of address ranges in a mm_struct needs to be
performed when pages are removed or permissions etc change.
If invalidate_range_begin() is called with locks held then we
pass a flag into invalidate_range() to indicate that no sleeping is
possible. Locks are only held for truncate and huge pages.
In two cases we use invalidate_range_begin/end to invalidate
single pages because the pair allows holding off new references
(idea by Robin Holt).
do_wp_page(): We hold off new references while we update the pte.
xip_unmap: We are not taking the PageLock so we cannot
use the invalidate_page mmu_rmap_notifier. invalidate_range_begin/end
stands in.
Signed-off-by: Andrea Arcangeli <andrea@qumranet.com>
Signed-off-by: Robin Holt <holt@sgi.com>
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
mm/filemap_xip.c | 5 +++++
mm/fremap.c | 3 +++
mm/hugetlb.c | 3 +++
mm/memory.c | 35 +++++++++++++++++++++++++++++------
mm/mmap.c | 2 ++
mm/mprotect.c | 3 +++
mm/mremap.c | 7 ++++++-
7 files changed, 51 insertions(+), 7 deletions(-)
Index: linux-2.6/mm/fremap.c
===================================================================
--- linux-2.6.orig/mm/fremap.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/fremap.c 2008-02-14 18:45:07.000000000 -0800
@@ -15,6 +15,7 @@
#include <linux/rmap.h>
#include <linux/module.h>
#include <linux/syscalls.h>
+#include <linux/mmu_notifier.h>
#include <asm/mmu_context.h>
#include <asm/cacheflush.h>
@@ -214,7 +215,9 @@ asmlinkage long sys_remap_file_pages(uns
spin_unlock(&mapping->i_mmap_lock);
}
+ mmu_notifier(invalidate_range_begin, mm, start, start + size, 0);
err = populate_range(mm, vma, start, size, pgoff);
+ mmu_notifier(invalidate_range_end, mm, start, start + size, 0);
if (!err && !(flags & MAP_NONBLOCK)) {
if (unlikely(has_write_lock)) {
downgrade_write(&mm->mmap_sem);
Index: linux-2.6/mm/memory.c
===================================================================
--- linux-2.6.orig/mm/memory.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/memory.c 2008-02-14 18:45:07.000000000 -0800
@@ -51,6 +51,7 @@
#include <linux/init.h>
#include <linux/writeback.h>
#include <linux/memcontrol.h>
+#include <linux/mmu_notifier.h>
#include <asm/pgalloc.h>
#include <asm/uaccess.h>
@@ -611,6 +612,9 @@ int copy_page_range(struct mm_struct *ds
if (is_vm_hugetlb_page(vma))
return copy_hugetlb_page_range(dst_mm, src_mm, vma);
+ if (is_cow_mapping(vma->vm_flags))
+ mmu_notifier(invalidate_range_begin, src_mm, addr, end, 0);
+
dst_pgd = pgd_offset(dst_mm, addr);
src_pgd = pgd_offset(src_mm, addr);
do {
@@ -621,6 +625,11 @@ int copy_page_range(struct mm_struct *ds
vma, addr, next))
return -ENOMEM;
} while (dst_pgd++, src_pgd++, addr = next, addr != end);
+
+ if (is_cow_mapping(vma->vm_flags))
+ mmu_notifier(invalidate_range_end, src_mm,
+ vma->vm_start, end, 0);
+
return 0;
}
@@ -893,13 +902,16 @@ unsigned long zap_page_range(struct vm_a
struct mmu_gather *tlb;
unsigned long end = address + size;
unsigned long nr_accounted = 0;
+ int atomic = details ? (details->i_mmap_lock != 0) : 0;
lru_add_drain();
tlb = tlb_gather_mmu(mm, 0);
update_hiwater_rss(mm);
+ mmu_notifier(invalidate_range_begin, mm, address, end, atomic);
end = unmap_vmas(&tlb, vma, address, end, &nr_accounted, details);
if (tlb)
tlb_finish_mmu(tlb, address, end);
+ mmu_notifier(invalidate_range_end, mm, address, end, atomic);
return end;
}
@@ -1339,7 +1351,7 @@ int remap_pfn_range(struct vm_area_struc
{
pgd_t *pgd;
unsigned long next;
- unsigned long end = addr + PAGE_ALIGN(size);
+ unsigned long start = addr, end = addr + PAGE_ALIGN(size);
struct mm_struct *mm = vma->vm_mm;
int err;
@@ -1373,6 +1385,7 @@ int remap_pfn_range(struct vm_area_struc
pfn -= addr >> PAGE_SHIFT;
pgd = pgd_offset(mm, addr);
flush_cache_range(vma, addr, end);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
do {
next = pgd_addr_end(addr, end);
err = remap_pud_range(mm, pgd, addr, next,
@@ -1380,6 +1393,7 @@ int remap_pfn_range(struct vm_area_struc
if (err)
break;
} while (pgd++, addr = next, addr != end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
return err;
}
EXPORT_SYMBOL(remap_pfn_range);
@@ -1463,10 +1477,11 @@ int apply_to_page_range(struct mm_struct
{
pgd_t *pgd;
unsigned long next;
- unsigned long end = addr + size;
+ unsigned long start = addr, end = addr + size;
int err;
BUG_ON(addr >= end);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
pgd = pgd_offset(mm, addr);
do {
next = pgd_addr_end(addr, end);
@@ -1474,6 +1489,7 @@ int apply_to_page_range(struct mm_struct
if (err)
break;
} while (pgd++, addr = next, addr != end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
return err;
}
EXPORT_SYMBOL_GPL(apply_to_page_range);
@@ -1614,8 +1630,10 @@ static int do_wp_page(struct mm_struct *
page_table = pte_offset_map_lock(mm, pmd, address,
&ptl);
page_cache_release(old_page);
- if (!pte_same(*page_table, orig_pte))
- goto unlock;
+ if (!pte_same(*page_table, orig_pte)) {
+ pte_unmap_unlock(page_table, ptl);
+ goto check_dirty;
+ }
page_mkwrite = 1;
}
@@ -1631,7 +1649,8 @@ static int do_wp_page(struct mm_struct *
if (ptep_set_access_flags(vma, address, page_table, entry,1))
update_mmu_cache(vma, address, entry);
ret |= VM_FAULT_WRITE;
- goto unlock;
+ pte_unmap_unlock(page_table, ptl);
+ goto check_dirty;
}
/*
@@ -1653,6 +1672,8 @@ gotten:
if (mem_cgroup_charge(new_page, mm, GFP_KERNEL))
goto oom_free_new;
+ mmu_notifier(invalidate_range_begin, mm, address,
+ address + PAGE_SIZE, 0);
/*
* Re-check the pte - we dropped the lock
*/
@@ -1691,8 +1712,10 @@ gotten:
page_cache_release(new_page);
if (old_page)
page_cache_release(old_page);
-unlock:
pte_unmap_unlock(page_table, ptl);
+ mmu_notifier(invalidate_range_end, mm,
+ address, address + PAGE_SIZE, 0);
+check_dirty:
if (dirty_page) {
if (vma->vm_file)
file_update_time(vma->vm_file);
Index: linux-2.6/mm/mmap.c
===================================================================
--- linux-2.6.orig/mm/mmap.c 2008-02-14 18:44:56.000000000 -0800
+++ linux-2.6/mm/mmap.c 2008-02-14 18:45:07.000000000 -0800
@@ -1748,11 +1748,13 @@ static void unmap_region(struct mm_struc
lru_add_drain();
tlb = tlb_gather_mmu(mm, 0);
update_hiwater_rss(mm);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL);
vm_unacct_memory(nr_accounted);
free_pgtables(&tlb, vma, prev? prev->vm_end: FIRST_USER_ADDRESS,
next? next->vm_start: 0);
tlb_finish_mmu(tlb, start, end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
}
/*
Index: linux-2.6/mm/hugetlb.c
===================================================================
--- linux-2.6.orig/mm/hugetlb.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/hugetlb.c 2008-02-14 18:45:07.000000000 -0800
@@ -14,6 +14,7 @@
#include <linux/mempolicy.h>
#include <linux/cpuset.h>
#include <linux/mutex.h>
+#include <linux/mmu_notifier.h>
#include <asm/page.h>
#include <asm/pgtable.h>
@@ -755,6 +756,7 @@ void __unmap_hugepage_range(struct vm_ar
BUG_ON(start & ~HPAGE_MASK);
BUG_ON(end & ~HPAGE_MASK);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 1);
spin_lock(&mm->page_table_lock);
for (address = start; address < end; address += HPAGE_SIZE) {
ptep = huge_pte_offset(mm, address);
@@ -775,6 +777,7 @@ void __unmap_hugepage_range(struct vm_ar
}
spin_unlock(&mm->page_table_lock);
flush_tlb_range(vma, start, end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 1);
list_for_each_entry_safe(page, tmp, &page_list, lru) {
list_del(&page->lru);
put_page(page);
Index: linux-2.6/mm/filemap_xip.c
===================================================================
--- linux-2.6.orig/mm/filemap_xip.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/filemap_xip.c 2008-02-14 18:45:07.000000000 -0800
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/uio.h>
#include <linux/rmap.h>
+#include <linux/mmu_notifier.h>
#include <linux/sched.h>
#include <asm/tlbflush.h>
@@ -190,6 +191,8 @@ __xip_unmap (struct address_space * mapp
address = vma->vm_start +
((pgoff - vma->vm_pgoff) << PAGE_SHIFT);
BUG_ON(address < vma->vm_start || address >= vma->vm_end);
+ mmu_notifier(invalidate_range_begin, mm, address,
+ address + PAGE_SIZE, 1);
pte = page_check_address(page, mm, address, &ptl);
if (pte) {
/* Nuke the page table entry. */
@@ -201,6 +204,8 @@ __xip_unmap (struct address_space * mapp
pte_unmap_unlock(pte, ptl);
page_cache_release(page);
}
+ mmu_notifier(invalidate_range_end, mm,
+ address, address + PAGE_SIZE, 1);
}
spin_unlock(&mapping->i_mmap_lock);
}
Index: linux-2.6/mm/mremap.c
===================================================================
--- linux-2.6.orig/mm/mremap.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/mremap.c 2008-02-14 18:45:07.000000000 -0800
@@ -18,6 +18,7 @@
#include <linux/highmem.h>
#include <linux/security.h>
#include <linux/syscalls.h>
+#include <linux/mmu_notifier.h>
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
@@ -124,12 +125,15 @@ unsigned long move_page_tables(struct vm
unsigned long old_addr, struct vm_area_struct *new_vma,
unsigned long new_addr, unsigned long len)
{
- unsigned long extent, next, old_end;
+ unsigned long extent, next, old_start, old_end;
pmd_t *old_pmd, *new_pmd;
+ old_start = old_addr;
old_end = old_addr + len;
flush_cache_range(vma, old_addr, old_end);
+ mmu_notifier(invalidate_range_begin, vma->vm_mm,
+ old_addr, old_end, 0);
for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
cond_resched();
next = (old_addr + PMD_SIZE) & PMD_MASK;
@@ -150,6 +154,7 @@ unsigned long move_page_tables(struct vm
move_ptes(vma, old_pmd, old_addr, old_addr + extent,
new_vma, new_pmd, new_addr);
}
+ mmu_notifier(invalidate_range_end, vma->vm_mm, old_start, old_end, 0);
return len + old_addr - old_end; /* how much done */
}
Index: linux-2.6/mm/mprotect.c
===================================================================
--- linux-2.6.orig/mm/mprotect.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/mprotect.c 2008-02-14 18:45:07.000000000 -0800
@@ -21,6 +21,7 @@
#include <linux/syscalls.h>
#include <linux/swap.h>
#include <linux/swapops.h>
+#include <linux/mmu_notifier.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/cacheflush.h>
@@ -198,10 +199,12 @@ success:
dirty_accountable = 1;
}
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
if (is_vm_hugetlb_page(vma))
hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
else
change_protection(vma, start, end, vma->vm_page_prot, dirty_accountable);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
vm_stat_account(mm, oldflags, vma->vm_file, -nrpages);
vm_stat_account(mm, newflags, vma->vm_file, nrpages);
return 0;
--
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Lameter <clameter@sgi.com>
To: akpm@linux-foundation.org
Cc: steiner@sgi.com, Andrea Arcangeli <andrea@qumranet.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
linux-mm@kvack.org, Kanoj Sarcar <kanojsarcar@yahoo.com>,
Roland Dreier <rdreier@cisco.com>,
Steve Wise <swise@opengridcomputing.com>,
linux-kernel@vger.kernel.org, Avi Kivity <avi@qumranet.com>,
kvm-devel@lists.sourceforge.net, daniel.blueman@quadrics.com,
Robin Holt <holt@sgi.com>,
general@lists.openfabrics.org
Subject: [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges
Date: Thu, 14 Feb 2008 22:49:01 -0800 [thread overview]
Message-ID: <20080215064932.620773824@sgi.com> (raw)
In-Reply-To: 20080215064859.384203497@sgi.com
[-- Attachment #1: mmu_invalidate_range_callbacks --]
[-- Type: text/plain, Size: 11465 bytes --]
The invalidation of address ranges in a mm_struct needs to be
performed when pages are removed or permissions etc change.
If invalidate_range_begin() is called with locks held then we
pass a flag into invalidate_range() to indicate that no sleeping is
possible. Locks are only held for truncate and huge pages.
In two cases we use invalidate_range_begin/end to invalidate
single pages because the pair allows holding off new references
(idea by Robin Holt).
do_wp_page(): We hold off new references while we update the pte.
xip_unmap: We are not taking the PageLock so we cannot
use the invalidate_page mmu_rmap_notifier. invalidate_range_begin/end
stands in.
Signed-off-by: Andrea Arcangeli <andrea@qumranet.com>
Signed-off-by: Robin Holt <holt@sgi.com>
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
mm/filemap_xip.c | 5 +++++
mm/fremap.c | 3 +++
mm/hugetlb.c | 3 +++
mm/memory.c | 35 +++++++++++++++++++++++++++++------
mm/mmap.c | 2 ++
mm/mprotect.c | 3 +++
mm/mremap.c | 7 ++++++-
7 files changed, 51 insertions(+), 7 deletions(-)
Index: linux-2.6/mm/fremap.c
===================================================================
--- linux-2.6.orig/mm/fremap.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/fremap.c 2008-02-14 18:45:07.000000000 -0800
@@ -15,6 +15,7 @@
#include <linux/rmap.h>
#include <linux/module.h>
#include <linux/syscalls.h>
+#include <linux/mmu_notifier.h>
#include <asm/mmu_context.h>
#include <asm/cacheflush.h>
@@ -214,7 +215,9 @@ asmlinkage long sys_remap_file_pages(uns
spin_unlock(&mapping->i_mmap_lock);
}
+ mmu_notifier(invalidate_range_begin, mm, start, start + size, 0);
err = populate_range(mm, vma, start, size, pgoff);
+ mmu_notifier(invalidate_range_end, mm, start, start + size, 0);
if (!err && !(flags & MAP_NONBLOCK)) {
if (unlikely(has_write_lock)) {
downgrade_write(&mm->mmap_sem);
Index: linux-2.6/mm/memory.c
===================================================================
--- linux-2.6.orig/mm/memory.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/memory.c 2008-02-14 18:45:07.000000000 -0800
@@ -51,6 +51,7 @@
#include <linux/init.h>
#include <linux/writeback.h>
#include <linux/memcontrol.h>
+#include <linux/mmu_notifier.h>
#include <asm/pgalloc.h>
#include <asm/uaccess.h>
@@ -611,6 +612,9 @@ int copy_page_range(struct mm_struct *ds
if (is_vm_hugetlb_page(vma))
return copy_hugetlb_page_range(dst_mm, src_mm, vma);
+ if (is_cow_mapping(vma->vm_flags))
+ mmu_notifier(invalidate_range_begin, src_mm, addr, end, 0);
+
dst_pgd = pgd_offset(dst_mm, addr);
src_pgd = pgd_offset(src_mm, addr);
do {
@@ -621,6 +625,11 @@ int copy_page_range(struct mm_struct *ds
vma, addr, next))
return -ENOMEM;
} while (dst_pgd++, src_pgd++, addr = next, addr != end);
+
+ if (is_cow_mapping(vma->vm_flags))
+ mmu_notifier(invalidate_range_end, src_mm,
+ vma->vm_start, end, 0);
+
return 0;
}
@@ -893,13 +902,16 @@ unsigned long zap_page_range(struct vm_a
struct mmu_gather *tlb;
unsigned long end = address + size;
unsigned long nr_accounted = 0;
+ int atomic = details ? (details->i_mmap_lock != 0) : 0;
lru_add_drain();
tlb = tlb_gather_mmu(mm, 0);
update_hiwater_rss(mm);
+ mmu_notifier(invalidate_range_begin, mm, address, end, atomic);
end = unmap_vmas(&tlb, vma, address, end, &nr_accounted, details);
if (tlb)
tlb_finish_mmu(tlb, address, end);
+ mmu_notifier(invalidate_range_end, mm, address, end, atomic);
return end;
}
@@ -1339,7 +1351,7 @@ int remap_pfn_range(struct vm_area_struc
{
pgd_t *pgd;
unsigned long next;
- unsigned long end = addr + PAGE_ALIGN(size);
+ unsigned long start = addr, end = addr + PAGE_ALIGN(size);
struct mm_struct *mm = vma->vm_mm;
int err;
@@ -1373,6 +1385,7 @@ int remap_pfn_range(struct vm_area_struc
pfn -= addr >> PAGE_SHIFT;
pgd = pgd_offset(mm, addr);
flush_cache_range(vma, addr, end);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
do {
next = pgd_addr_end(addr, end);
err = remap_pud_range(mm, pgd, addr, next,
@@ -1380,6 +1393,7 @@ int remap_pfn_range(struct vm_area_struc
if (err)
break;
} while (pgd++, addr = next, addr != end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
return err;
}
EXPORT_SYMBOL(remap_pfn_range);
@@ -1463,10 +1477,11 @@ int apply_to_page_range(struct mm_struct
{
pgd_t *pgd;
unsigned long next;
- unsigned long end = addr + size;
+ unsigned long start = addr, end = addr + size;
int err;
BUG_ON(addr >= end);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
pgd = pgd_offset(mm, addr);
do {
next = pgd_addr_end(addr, end);
@@ -1474,6 +1489,7 @@ int apply_to_page_range(struct mm_struct
if (err)
break;
} while (pgd++, addr = next, addr != end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
return err;
}
EXPORT_SYMBOL_GPL(apply_to_page_range);
@@ -1614,8 +1630,10 @@ static int do_wp_page(struct mm_struct *
page_table = pte_offset_map_lock(mm, pmd, address,
&ptl);
page_cache_release(old_page);
- if (!pte_same(*page_table, orig_pte))
- goto unlock;
+ if (!pte_same(*page_table, orig_pte)) {
+ pte_unmap_unlock(page_table, ptl);
+ goto check_dirty;
+ }
page_mkwrite = 1;
}
@@ -1631,7 +1649,8 @@ static int do_wp_page(struct mm_struct *
if (ptep_set_access_flags(vma, address, page_table, entry,1))
update_mmu_cache(vma, address, entry);
ret |= VM_FAULT_WRITE;
- goto unlock;
+ pte_unmap_unlock(page_table, ptl);
+ goto check_dirty;
}
/*
@@ -1653,6 +1672,8 @@ gotten:
if (mem_cgroup_charge(new_page, mm, GFP_KERNEL))
goto oom_free_new;
+ mmu_notifier(invalidate_range_begin, mm, address,
+ address + PAGE_SIZE, 0);
/*
* Re-check the pte - we dropped the lock
*/
@@ -1691,8 +1712,10 @@ gotten:
page_cache_release(new_page);
if (old_page)
page_cache_release(old_page);
-unlock:
pte_unmap_unlock(page_table, ptl);
+ mmu_notifier(invalidate_range_end, mm,
+ address, address + PAGE_SIZE, 0);
+check_dirty:
if (dirty_page) {
if (vma->vm_file)
file_update_time(vma->vm_file);
Index: linux-2.6/mm/mmap.c
===================================================================
--- linux-2.6.orig/mm/mmap.c 2008-02-14 18:44:56.000000000 -0800
+++ linux-2.6/mm/mmap.c 2008-02-14 18:45:07.000000000 -0800
@@ -1748,11 +1748,13 @@ static void unmap_region(struct mm_struc
lru_add_drain();
tlb = tlb_gather_mmu(mm, 0);
update_hiwater_rss(mm);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL);
vm_unacct_memory(nr_accounted);
free_pgtables(&tlb, vma, prev? prev->vm_end: FIRST_USER_ADDRESS,
next? next->vm_start: 0);
tlb_finish_mmu(tlb, start, end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
}
/*
Index: linux-2.6/mm/hugetlb.c
===================================================================
--- linux-2.6.orig/mm/hugetlb.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/hugetlb.c 2008-02-14 18:45:07.000000000 -0800
@@ -14,6 +14,7 @@
#include <linux/mempolicy.h>
#include <linux/cpuset.h>
#include <linux/mutex.h>
+#include <linux/mmu_notifier.h>
#include <asm/page.h>
#include <asm/pgtable.h>
@@ -755,6 +756,7 @@ void __unmap_hugepage_range(struct vm_ar
BUG_ON(start & ~HPAGE_MASK);
BUG_ON(end & ~HPAGE_MASK);
+ mmu_notifier(invalidate_range_begin, mm, start, end, 1);
spin_lock(&mm->page_table_lock);
for (address = start; address < end; address += HPAGE_SIZE) {
ptep = huge_pte_offset(mm, address);
@@ -775,6 +777,7 @@ void __unmap_hugepage_range(struct vm_ar
}
spin_unlock(&mm->page_table_lock);
flush_tlb_range(vma, start, end);
+ mmu_notifier(invalidate_range_end, mm, start, end, 1);
list_for_each_entry_safe(page, tmp, &page_list, lru) {
list_del(&page->lru);
put_page(page);
Index: linux-2.6/mm/filemap_xip.c
===================================================================
--- linux-2.6.orig/mm/filemap_xip.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/filemap_xip.c 2008-02-14 18:45:07.000000000 -0800
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/uio.h>
#include <linux/rmap.h>
+#include <linux/mmu_notifier.h>
#include <linux/sched.h>
#include <asm/tlbflush.h>
@@ -190,6 +191,8 @@ __xip_unmap (struct address_space * mapp
address = vma->vm_start +
((pgoff - vma->vm_pgoff) << PAGE_SHIFT);
BUG_ON(address < vma->vm_start || address >= vma->vm_end);
+ mmu_notifier(invalidate_range_begin, mm, address,
+ address + PAGE_SIZE, 1);
pte = page_check_address(page, mm, address, &ptl);
if (pte) {
/* Nuke the page table entry. */
@@ -201,6 +204,8 @@ __xip_unmap (struct address_space * mapp
pte_unmap_unlock(pte, ptl);
page_cache_release(page);
}
+ mmu_notifier(invalidate_range_end, mm,
+ address, address + PAGE_SIZE, 1);
}
spin_unlock(&mapping->i_mmap_lock);
}
Index: linux-2.6/mm/mremap.c
===================================================================
--- linux-2.6.orig/mm/mremap.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/mremap.c 2008-02-14 18:45:07.000000000 -0800
@@ -18,6 +18,7 @@
#include <linux/highmem.h>
#include <linux/security.h>
#include <linux/syscalls.h>
+#include <linux/mmu_notifier.h>
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
@@ -124,12 +125,15 @@ unsigned long move_page_tables(struct vm
unsigned long old_addr, struct vm_area_struct *new_vma,
unsigned long new_addr, unsigned long len)
{
- unsigned long extent, next, old_end;
+ unsigned long extent, next, old_start, old_end;
pmd_t *old_pmd, *new_pmd;
+ old_start = old_addr;
old_end = old_addr + len;
flush_cache_range(vma, old_addr, old_end);
+ mmu_notifier(invalidate_range_begin, vma->vm_mm,
+ old_addr, old_end, 0);
for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
cond_resched();
next = (old_addr + PMD_SIZE) & PMD_MASK;
@@ -150,6 +154,7 @@ unsigned long move_page_tables(struct vm
move_ptes(vma, old_pmd, old_addr, old_addr + extent,
new_vma, new_pmd, new_addr);
}
+ mmu_notifier(invalidate_range_end, vma->vm_mm, old_start, old_end, 0);
return len + old_addr - old_end; /* how much done */
}
Index: linux-2.6/mm/mprotect.c
===================================================================
--- linux-2.6.orig/mm/mprotect.c 2008-02-14 18:43:31.000000000 -0800
+++ linux-2.6/mm/mprotect.c 2008-02-14 18:45:07.000000000 -0800
@@ -21,6 +21,7 @@
#include <linux/syscalls.h>
#include <linux/swap.h>
#include <linux/swapops.h>
+#include <linux/mmu_notifier.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/cacheflush.h>
@@ -198,10 +199,12 @@ success:
dirty_accountable = 1;
}
+ mmu_notifier(invalidate_range_begin, mm, start, end, 0);
if (is_vm_hugetlb_page(vma))
hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
else
change_protection(vma, start, end, vma->vm_page_prot, dirty_accountable);
+ mmu_notifier(invalidate_range_end, mm, start, end, 0);
vm_stat_account(mm, oldflags, vma->vm_file, -nrpages);
vm_stat_account(mm, newflags, vma->vm_file, nrpages);
return 0;
--
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
next prev parent reply other threads:[~2008-02-15 6:52 UTC|newest]
Thread overview: 376+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-15 6:48 [patch 0/6] MMU Notifiers V7 Christoph Lameter
2008-02-15 6:48 ` [ofa-general] " Christoph Lameter
2008-02-15 6:49 ` [patch 1/6] mmu_notifier: Core code Christoph Lameter
2008-02-15 6:49 ` Christoph Lameter
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` [ofa-general] " Andrew Morton
2008-02-16 8:45 ` Avi Kivity
2008-02-16 8:45 ` Avi Kivity
2008-02-16 8:45 ` Avi Kivity
2008-02-16 8:56 ` Andrew Morton
2008-02-16 8:56 ` Andrew Morton
2008-02-16 8:56 ` [ofa-general] " Andrew Morton
2008-02-16 9:21 ` Avi Kivity
2008-02-16 9:21 ` Avi Kivity
2008-02-16 9:21 ` Avi Kivity
2008-02-16 10:41 ` Brice Goglin
2008-02-16 10:41 ` Brice Goglin
2008-02-16 10:58 ` Andrew Morton
2008-02-16 10:58 ` Andrew Morton
2008-02-16 19:31 ` Christoph Lameter
2008-02-16 19:31 ` Christoph Lameter
2008-02-16 19:21 ` Christoph Lameter
2008-02-16 19:21 ` Christoph Lameter
2008-02-16 19:21 ` [ofa-general] " Christoph Lameter
2008-02-17 3:01 ` Andrea Arcangeli
2008-02-17 3:01 ` Andrea Arcangeli
2008-02-17 3:01 ` [ofa-general] " Andrea Arcangeli
2008-02-17 12:24 ` Robin Holt
2008-02-17 12:24 ` Robin Holt
2008-02-17 12:24 ` Robin Holt
2008-02-17 5:04 ` Doug Maxey
2008-02-17 5:04 ` Doug Maxey
2008-02-17 5:04 ` Doug Maxey
2008-02-18 22:33 ` Roland Dreier
2008-02-18 22:33 ` Roland Dreier
2008-02-18 22:33 ` [ofa-general] " Roland Dreier
2008-02-15 6:49 ` Christoph Lameter [this message]
2008-02-15 6:49 ` [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges Christoph Lameter
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` [ofa-general] " Andrew Morton
2008-02-16 19:26 ` Christoph Lameter
2008-02-16 19:26 ` Christoph Lameter
2008-02-16 19:26 ` [ofa-general] " Christoph Lameter
2008-02-19 8:54 ` Nick Piggin
2008-02-19 8:54 ` Nick Piggin
2008-02-19 8:54 ` [ofa-general] " Nick Piggin
2008-02-19 13:34 ` Andrea Arcangeli
2008-02-19 13:34 ` Andrea Arcangeli
2008-02-19 13:34 ` Andrea Arcangeli
2008-02-27 22:23 ` Christoph Lameter
2008-02-27 22:23 ` Christoph Lameter
2008-02-27 22:23 ` Christoph Lameter
2008-02-27 23:57 ` Andrea Arcangeli
2008-02-27 23:57 ` Andrea Arcangeli
2008-02-27 23:57 ` Andrea Arcangeli
2008-02-19 23:08 ` Nick Piggin
2008-02-19 23:08 ` Nick Piggin
2008-02-19 23:08 ` [ofa-general] " Nick Piggin
2008-02-20 1:00 ` Andrea Arcangeli
2008-02-20 1:00 ` Andrea Arcangeli
2008-02-20 1:00 ` Andrea Arcangeli
2008-02-20 3:00 ` Robin Holt
2008-02-20 3:00 ` Robin Holt
2008-02-20 3:00 ` Robin Holt
2008-02-20 3:11 ` Nick Piggin
2008-02-20 3:11 ` Nick Piggin
2008-02-20 3:11 ` Nick Piggin
2008-02-20 3:19 ` Robin Holt
2008-02-20 3:19 ` Robin Holt
2008-02-20 3:19 ` [ofa-general] " Robin Holt
2008-02-27 22:39 ` Christoph Lameter
2008-02-27 22:39 ` Christoph Lameter
2008-02-27 22:39 ` Christoph Lameter
2008-02-28 0:38 ` Andrea Arcangeli
2008-02-28 0:38 ` Andrea Arcangeli
2008-02-28 0:38 ` Andrea Arcangeli
2008-02-27 22:35 ` Christoph Lameter
2008-02-27 22:35 ` Christoph Lameter
2008-02-27 22:35 ` [ofa-general] " Christoph Lameter
2008-02-27 22:42 ` Jack Steiner
2008-02-27 22:42 ` Jack Steiner
2008-02-27 22:42 ` [ofa-general] " Jack Steiner
2008-02-28 0:10 ` Christoph Lameter
2008-02-28 0:10 ` Christoph Lameter
2008-02-28 0:10 ` Christoph Lameter
2008-02-28 0:11 ` Andrea Arcangeli
2008-02-28 0:11 ` Andrea Arcangeli
2008-02-28 0:11 ` [ofa-general] " Andrea Arcangeli
2008-02-28 0:14 ` Christoph Lameter
2008-02-28 0:14 ` Christoph Lameter
2008-02-28 0:14 ` Christoph Lameter
2008-02-28 0:52 ` Andrea Arcangeli
2008-02-28 0:52 ` Andrea Arcangeli
2008-02-28 0:52 ` [ofa-general] " Andrea Arcangeli
2008-02-28 1:03 ` Christoph Lameter
2008-02-28 1:03 ` Christoph Lameter
2008-02-28 1:03 ` Christoph Lameter
2008-02-28 1:10 ` Andrea Arcangeli
2008-02-28 1:10 ` Andrea Arcangeli
2008-02-28 1:10 ` Andrea Arcangeli
2008-02-28 18:43 ` Christoph Lameter
2008-02-28 18:43 ` Christoph Lameter
2008-02-28 18:43 ` [ofa-general] " Christoph Lameter
2008-02-29 0:55 ` Andrea Arcangeli
2008-02-29 0:55 ` Andrea Arcangeli
2008-02-29 0:55 ` Andrea Arcangeli
2008-02-29 0:59 ` Christoph Lameter
2008-02-29 0:59 ` Christoph Lameter
2008-02-29 0:59 ` [ofa-general] " Christoph Lameter
2008-02-29 13:13 ` Andrea Arcangeli
2008-02-29 13:13 ` Andrea Arcangeli
2008-02-29 13:13 ` Andrea Arcangeli
2008-02-29 19:55 ` Christoph Lameter
2008-02-29 19:55 ` Christoph Lameter
2008-02-29 19:55 ` [ofa-general] " Christoph Lameter
2008-02-29 20:17 ` Andrea Arcangeli
2008-02-29 20:17 ` Andrea Arcangeli
2008-02-29 20:17 ` Andrea Arcangeli
2008-02-29 21:03 ` Christoph Lameter
2008-02-29 21:03 ` Christoph Lameter
2008-02-29 21:03 ` [ofa-general] " Christoph Lameter
2008-02-29 21:23 ` Andrea Arcangeli
2008-02-29 21:23 ` Andrea Arcangeli
2008-02-29 21:23 ` Andrea Arcangeli
2008-02-29 21:29 ` Christoph Lameter
2008-02-29 21:29 ` Christoph Lameter
2008-02-29 21:29 ` Christoph Lameter
2008-02-29 21:34 ` Christoph Lameter
2008-02-29 21:34 ` Christoph Lameter
2008-02-29 21:34 ` Christoph Lameter
2008-02-29 21:48 ` Andrea Arcangeli
2008-02-29 21:48 ` Andrea Arcangeli
2008-02-29 21:48 ` [ofa-general] " Andrea Arcangeli
2008-02-29 22:12 ` Christoph Lameter
2008-02-29 22:12 ` Christoph Lameter
2008-02-29 22:12 ` Christoph Lameter
2008-02-29 22:41 ` Andrea Arcangeli
2008-02-29 22:41 ` Andrea Arcangeli
2008-02-29 22:41 ` [ofa-general] " Andrea Arcangeli
2008-02-28 10:53 ` Robin Holt
2008-02-28 10:53 ` Robin Holt
2008-02-28 10:53 ` [ofa-general] " Robin Holt
2008-03-03 5:11 ` Nick Piggin
2008-03-03 5:11 ` Nick Piggin
2008-03-03 5:11 ` Nick Piggin
2008-03-03 19:28 ` Christoph Lameter
2008-03-03 19:28 ` Christoph Lameter
2008-03-03 19:28 ` [ofa-general] " Christoph Lameter
2008-03-03 19:50 ` Nick Piggin
2008-03-03 19:50 ` Nick Piggin
2008-03-04 18:58 ` Christoph Lameter
2008-03-04 18:58 ` Christoph Lameter
2008-03-04 18:58 ` Christoph Lameter
2008-03-05 0:52 ` Nick Piggin
2008-03-05 0:52 ` Nick Piggin
2008-02-15 6:49 ` [patch 3/6] mmu_notifier: invalidate_page callbacks Christoph Lameter
2008-02-15 6:49 ` Christoph Lameter
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` [ofa-general] " Andrew Morton
2008-02-16 11:07 ` Andrea Arcangeli
2008-02-16 11:07 ` Andrea Arcangeli
2008-02-16 11:07 ` Andrea Arcangeli
2008-02-16 19:22 ` Christoph Lameter
2008-02-16 19:22 ` Christoph Lameter
2008-02-16 19:22 ` [ofa-general] " Christoph Lameter
2008-02-16 19:54 ` Avi Kivity
2008-02-16 19:54 ` Avi Kivity
2008-02-16 19:54 ` [ofa-general] " Avi Kivity
2008-02-19 8:46 ` Nick Piggin
2008-02-19 8:46 ` Nick Piggin
2008-02-19 8:46 ` [ofa-general] " Nick Piggin
2008-02-19 13:30 ` Andrea Arcangeli
2008-02-19 13:30 ` Andrea Arcangeli
2008-02-19 13:30 ` [ofa-general] " Andrea Arcangeli
2008-02-18 1:51 ` Nick Piggin
2008-02-18 1:51 ` Nick Piggin
2008-02-18 1:51 ` Nick Piggin
2008-02-15 6:49 ` [patch 4/6] mmu_notifier: Skeleton driver for a simple mmu_notifier Christoph Lameter
2008-02-15 6:49 ` Christoph Lameter
2008-02-15 6:49 ` [patch 5/6] mmu_notifier: Support for drivers with revers maps (f.e. for XPmem) Christoph Lameter
2008-02-15 6:49 ` Christoph Lameter
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` Andrew Morton
2008-02-16 3:37 ` [ofa-general] " Andrew Morton
2008-02-16 19:28 ` Christoph Lameter
2008-02-16 19:28 ` Christoph Lameter
2008-02-16 19:28 ` [ofa-general] " Christoph Lameter
2008-02-19 23:55 ` Nick Piggin
2008-02-19 23:55 ` Nick Piggin
2008-02-19 23:55 ` [ofa-general] " Nick Piggin
2008-02-20 3:12 ` Robin Holt
2008-02-20 3:12 ` Robin Holt
2008-02-20 3:12 ` [ofa-general] " Robin Holt
2008-02-20 3:51 ` Nick Piggin
2008-02-20 3:51 ` Nick Piggin
2008-02-20 3:51 ` [ofa-general] " Nick Piggin
2008-02-20 9:00 ` Robin Holt
2008-02-20 9:00 ` Robin Holt
2008-02-20 9:00 ` [ofa-general] " Robin Holt
2008-02-20 9:05 ` Robin Holt
2008-02-20 9:05 ` Robin Holt
2008-02-20 9:05 ` Robin Holt
2008-02-21 4:20 ` Nick Piggin
2008-02-21 4:20 ` Nick Piggin
2008-02-21 10:58 ` Robin Holt
2008-02-21 10:58 ` Robin Holt
2008-02-21 10:58 ` Robin Holt
2008-02-26 6:11 ` Nick Piggin
2008-02-26 6:11 ` Nick Piggin
2008-02-26 6:11 ` Nick Piggin
2008-02-26 7:21 ` [ofa-general] " Gleb Natapov
2008-02-26 7:21 ` Gleb Natapov
2008-02-26 7:21 ` Gleb Natapov
2008-02-26 8:52 ` Nick Piggin
2008-02-26 8:52 ` Nick Piggin
2008-02-26 8:52 ` Nick Piggin
2008-02-26 9:38 ` Gleb Natapov
2008-02-26 9:38 ` Gleb Natapov
2008-02-26 9:38 ` Gleb Natapov
2008-02-26 9:52 ` KOSAKI Motohiro
2008-02-26 9:52 ` KOSAKI Motohiro
2008-02-26 9:52 ` KOSAKI Motohiro
2008-02-26 12:28 ` Robin Holt
2008-02-26 12:28 ` Robin Holt
2008-02-26 12:28 ` Robin Holt
2008-02-26 12:29 ` Robin Holt
2008-02-26 12:29 ` Robin Holt
2008-02-26 12:29 ` [ofa-general] " Robin Holt
2008-02-27 22:43 ` Christoph Lameter
2008-02-27 22:43 ` Christoph Lameter
2008-02-27 22:43 ` [ofa-general] " Christoph Lameter
2008-02-28 0:42 ` Andrea Arcangeli
2008-02-28 0:42 ` Andrea Arcangeli
2008-02-28 0:42 ` [ofa-general] " Andrea Arcangeli
2008-02-28 1:01 ` Christoph Lameter
2008-02-28 1:01 ` Christoph Lameter
2008-02-28 1:01 ` Christoph Lameter
2008-02-15 6:49 ` [patch 6/6] mmu_rmap_notifier: Skeleton for complex driver that uses its own rmaps Christoph Lameter
2008-02-15 6:49 ` Christoph Lameter
2008-02-16 10:48 ` [PATCH] KVM swapping with MMU Notifiers V7 Andrea Arcangeli
2008-02-16 10:48 ` Andrea Arcangeli
2008-02-16 10:48 ` Andrea Arcangeli
2008-02-16 11:08 ` Andrew Morton
2008-02-16 11:08 ` Andrew Morton
2008-02-16 11:08 ` [ofa-general] " Andrew Morton
2008-02-18 12:17 ` Andrea Arcangeli
2008-02-18 12:17 ` Andrea Arcangeli
2008-02-16 11:51 ` Robin Holt
2008-02-16 11:51 ` Robin Holt
2008-02-16 11:51 ` [ofa-general] " Robin Holt
2008-02-18 12:35 ` Andrea Arcangeli
2008-02-18 12:35 ` Andrea Arcangeli
2008-02-18 12:35 ` Andrea Arcangeli
-- strict thread matches above, loose matches on Subject: below --
2008-02-08 22:06 [patch 0/6] MMU Notifiers V6 Christoph Lameter
2008-02-08 22:06 ` [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges Christoph Lameter
2008-02-08 22:06 ` Christoph Lameter
2008-01-30 2:29 [patch 0/6] [RFC] MMU Notifiers V3 Christoph Lameter
2008-01-30 2:29 ` [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges Christoph Lameter
2008-01-30 2:29 ` Christoph Lameter
2008-01-28 20:28 [patch 0/6] [RFC] MMU Notifiers V2 Christoph Lameter
2008-01-28 20:28 ` [patch 2/6] mmu_notifier: Callbacks to invalidate address ranges Christoph Lameter
2008-01-28 20:28 ` Christoph Lameter
2008-01-29 16:20 ` Andrea Arcangeli
2008-01-29 16:20 ` Andrea Arcangeli
2008-01-29 16:20 ` Andrea Arcangeli
2008-01-29 18:28 ` Andrea Arcangeli
2008-01-29 18:28 ` Andrea Arcangeli
2008-01-29 18:28 ` Andrea Arcangeli
2008-01-29 20:30 ` Christoph Lameter
2008-01-29 20:30 ` Christoph Lameter
2008-01-29 20:30 ` Christoph Lameter
2008-01-29 21:36 ` Andrea Arcangeli
2008-01-29 21:36 ` Andrea Arcangeli
2008-01-29 21:36 ` Andrea Arcangeli
2008-01-29 21:53 ` Christoph Lameter
2008-01-29 21:53 ` Christoph Lameter
2008-01-29 21:53 ` Christoph Lameter
2008-01-29 22:35 ` Andrea Arcangeli
2008-01-29 22:35 ` Andrea Arcangeli
2008-01-29 22:35 ` Andrea Arcangeli
2008-01-29 22:55 ` Christoph Lameter
2008-01-29 22:55 ` Christoph Lameter
2008-01-29 22:55 ` Christoph Lameter
2008-01-29 23:43 ` Andrea Arcangeli
2008-01-29 23:43 ` Andrea Arcangeli
2008-01-29 23:43 ` Andrea Arcangeli
2008-01-30 0:34 ` Christoph Lameter
2008-01-30 0:34 ` Christoph Lameter
2008-01-30 0:34 ` Christoph Lameter
2008-01-29 19:55 ` Christoph Lameter
2008-01-29 19:55 ` Christoph Lameter
2008-01-29 19:55 ` Christoph Lameter
2008-01-29 21:17 ` Andrea Arcangeli
2008-01-29 21:17 ` Andrea Arcangeli
2008-01-29 21:35 ` Christoph Lameter
2008-01-29 21:35 ` Christoph Lameter
2008-01-29 21:35 ` Christoph Lameter
2008-01-29 22:02 ` Andrea Arcangeli
2008-01-29 22:02 ` Andrea Arcangeli
2008-01-29 22:02 ` Andrea Arcangeli
2008-01-29 22:39 ` Christoph Lameter
2008-01-29 22:39 ` Christoph Lameter
2008-01-29 22:39 ` Christoph Lameter
2008-01-30 0:00 ` Andrea Arcangeli
2008-01-30 0:00 ` Andrea Arcangeli
2008-01-30 0:00 ` Andrea Arcangeli
2008-01-30 0:05 ` Andrea Arcangeli
2008-01-30 0:05 ` Andrea Arcangeli
2008-01-30 0:05 ` Andrea Arcangeli
2008-01-30 0:22 ` Christoph Lameter
2008-01-30 0:22 ` Christoph Lameter
2008-01-30 0:22 ` Christoph Lameter
2008-01-30 0:59 ` Andrea Arcangeli
2008-01-30 0:59 ` Andrea Arcangeli
2008-01-30 0:59 ` Andrea Arcangeli
2008-01-30 8:26 ` Peter Zijlstra
2008-01-30 8:26 ` Peter Zijlstra
2008-01-30 0:20 ` Christoph Lameter
2008-01-30 0:20 ` Christoph Lameter
2008-01-30 0:20 ` Christoph Lameter
2008-01-30 0:28 ` Jack Steiner
2008-01-30 0:28 ` Jack Steiner
2008-01-30 0:28 ` Jack Steiner
2008-01-30 0:35 ` Christoph Lameter
2008-01-30 0:35 ` Christoph Lameter
2008-01-30 0:35 ` Christoph Lameter
2008-01-30 13:37 ` Andrea Arcangeli
2008-01-30 13:37 ` Andrea Arcangeli
2008-01-30 13:37 ` Andrea Arcangeli
2008-01-30 14:43 ` Jack Steiner
2008-01-30 14:43 ` Jack Steiner
2008-01-30 14:43 ` Jack Steiner
2008-01-30 19:41 ` Christoph Lameter
2008-01-30 19:41 ` Christoph Lameter
2008-01-30 19:41 ` Christoph Lameter
2008-01-30 20:29 ` Jack Steiner
2008-01-30 20:29 ` Jack Steiner
2008-01-30 20:29 ` Jack Steiner
2008-01-30 20:55 ` Christoph Lameter
2008-01-30 20:55 ` Christoph Lameter
2008-01-30 20:55 ` Christoph Lameter
2008-01-30 16:11 ` Robin Holt
2008-01-30 16:11 ` Robin Holt
2008-01-30 16:11 ` Robin Holt
2008-01-30 17:04 ` Andrea Arcangeli
2008-01-30 17:04 ` Andrea Arcangeli
2008-01-30 17:04 ` Andrea Arcangeli
2008-01-30 17:30 ` Robin Holt
2008-01-30 17:30 ` Robin Holt
2008-01-30 17:30 ` Robin Holt
2008-01-30 18:25 ` Andrea Arcangeli
2008-01-30 18:25 ` Andrea Arcangeli
2008-01-30 18:25 ` Andrea Arcangeli
2008-01-30 19:50 ` Christoph Lameter
2008-01-30 19:50 ` Christoph Lameter
2008-01-30 19:50 ` Christoph Lameter
2008-01-30 22:18 ` Robin Holt
2008-01-30 22:18 ` Robin Holt
2008-01-30 22:18 ` Robin Holt
2008-01-30 23:52 ` Andrea Arcangeli
2008-01-30 23:52 ` Andrea Arcangeli
2008-01-31 0:01 ` Christoph Lameter
2008-01-31 0:01 ` Christoph Lameter
2008-01-31 0:01 ` Christoph Lameter
[not found] ` <Pine.LNX.4.64.0801301555550.1722-RYO/mD75kfhx2SFC9UQUAuF7EQX82lMiAL8bYrjMMd8@public.gmane.org>
2008-01-31 0:34 ` Andrea Arcangeli
[not found] ` <20080131003434.GE7185-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-31 1:46 ` Christoph Lameter
[not found] ` <Pine.LNX.4.64.0801301728110.2454-RYO/mD75kfhx2SFC9UQUAuF7EQX82lMiAL8bYrjMMd8@public.gmane.org>
2008-01-31 2:34 ` Robin Holt
[not found] ` <20080131023401.GY26420-sJ/iWh9BUns@public.gmane.org>
2008-01-31 2:37 ` Christoph Lameter
2008-01-31 10:52 ` Andrea Arcangeli
2008-01-31 2:08 ` Christoph Lameter
[not found] ` <Pine.LNX.4.64.0801301805200.14071-RYO/mD75kfhx2SFC9UQUAuF7EQX82lMiAL8bYrjMMd8@public.gmane.org>
2008-01-31 2:42 ` Andrea Arcangeli
[not found] ` <20080131024252.GF7185-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-31 2:51 ` Christoph Lameter
[not found] ` <Pine.LNX.4.64.0801301848550.14263-RYO/mD75kfhx2SFC9UQUAuF7EQX82lMiAL8bYrjMMd8@public.gmane.org>
2008-01-31 13:39 ` Andrea Arcangeli
2008-01-30 19:35 ` Christoph Lameter
2008-01-30 19:35 ` Christoph Lameter
2008-01-30 19:35 ` Christoph Lameter
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=20080215064932.620773824@sgi.com \
--to=clameter@sgi.com \
--cc=akpm@linux-foundation.org \
--cc=andrea@qumranet.com \
--cc=holt@sgi.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.