* Re: [-mm][splitlru][PATCH 1/3] introduce __get_user_pages()
2008-07-19 8:42 ` [-mm][splitlru][PATCH 1/3] introduce __get_user_pages() kosaki.motohiro
@ 2008-07-19 7:47 ` KOSAKI Motohiro
0 siblings, 0 replies; 8+ messages in thread
From: KOSAKI Motohiro @ 2008-07-19 7:47 UTC (permalink / raw)
To: linux-mm, akpm
Cc: kosaki.motohiro, Li Zefan, Hugh Dickins, Lee Schermerhorn,
Rik van Riel
> new munlock processing need to GUP_FLAGS_IGNORE_VMA_PERMISSIONS.
> because current get_user_pages() can't grab PROT_NONE pages theresore
> it cause PROT_NONE pages can't munlock.
>
>
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> CC: Li Zefan <lizf@cn.fujitsu.com>
> CC: Hugh Dickins <hugh@veritas.com>
> CC: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
> CC: Rik van Riel <riel@redhat.com>
sorry, I forgot to change nommu.c
below patch is new version.
Unfortunately, I don't have nommu machine.
Then I beat up nommu tester...
---
mm/internal.h | 8 ++++++++
mm/memory.c | 37 +++++++++++++++++++++++++++++++------
mm/nommu.c | 42 +++++++++++++++++++++++++++++++-----------
3 files changed, 70 insertions(+), 17 deletions(-)
Index: b/mm/memory.c
===================================================================
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1108,12 +1108,17 @@ static inline int use_zero_page(struct v
return !vma->vm_ops || !vma->vm_ops->fault;
}
-int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
- unsigned long start, int len, int write, int force,
+
+
+int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int flags,
struct page **pages, struct vm_area_struct **vmas)
{
int i;
- unsigned int vm_flags;
+ unsigned int vm_flags = 0;
+ int write = !!(flags & GUP_FLAGS_WRITE);
+ int force = !!(flags & GUP_FLAGS_FORCE);
+ int ignore = !!(flags & GUP_FLAGS_IGNORE_VMA_PERMISSIONS);
if (len <= 0)
return 0;
@@ -1137,7 +1142,9 @@ int get_user_pages(struct task_struct *t
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
- if (write) /* user gate pages are read-only */
+
+ /* user gate pages are read-only */
+ if (!ignore && write)
return i ? : -EFAULT;
if (pg > TASK_SIZE)
pgd = pgd_offset_k(pg);
@@ -1169,8 +1176,9 @@ int get_user_pages(struct task_struct *t
continue;
}
- if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
- || !(vm_flags & vma->vm_flags))
+ if (!vma ||
+ (vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
+ (!ignore && !(vm_flags & vma->vm_flags)))
return i ? : -EFAULT;
if (is_vm_hugetlb_page(vma)) {
@@ -1245,6 +1253,23 @@ int get_user_pages(struct task_struct *t
} while (len);
return i;
}
+
+int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int write, int force,
+ struct page **pages, struct vm_area_struct **vmas)
+{
+ int flags = 0;
+
+ if (write)
+ flags |= GUP_FLAGS_WRITE;
+ if (force)
+ flags |= GUP_FLAGS_FORCE;
+
+ return __get_user_pages(tsk, mm,
+ start, len, flags,
+ pages, vmas);
+}
+
EXPORT_SYMBOL(get_user_pages);
pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr,
Index: b/mm/internal.h
===================================================================
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -243,4 +243,12 @@ static inline void mminit_validate_memmo
}
#endif /* CONFIG_SPARSEMEM */
+#define GUP_FLAGS_WRITE 0x1
+#define GUP_FLAGS_FORCE 0x2
+#define GUP_FLAGS_IGNORE_VMA_PERMISSIONS 0x4
+
+int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int flags,
+ struct page **pages, struct vm_area_struct **vmas);
+
#endif
Index: b/mm/nommu.c
===================================================================
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -128,20 +128,16 @@ unsigned int kobjsize(const void *objp)
return PAGE_SIZE << compound_order(page);
}
-/*
- * get a list of pages in an address range belonging to the specified process
- * and indicate the VMA that covers each page
- * - this is potentially dodgy as we may end incrementing the page count of a
- * slab page or a secondary page from a compound page
- * - don't permit access to VMAs that don't support it, such as I/O mappings
- */
-int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
- unsigned long start, int len, int write, int force,
- struct page **pages, struct vm_area_struct **vmas)
+int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int flags,
+ struct page **pages, struct vm_area_struct **vmas)
{
struct vm_area_struct *vma;
unsigned long vm_flags;
int i;
+ int write = !!(flags & GUP_FLAGS_WRITE);
+ int force = !!(flags & GUP_FLAGS_FORCE);
+ int ignore = !!(flags & GUP_FLAGS_IGNORE_VMA_PERMISSIONS);
/* calculate required read or write permissions.
* - if 'force' is set, we only require the "MAY" flags.
@@ -156,7 +152,7 @@ int get_user_pages(struct task_struct *t
/* protect what we can, including chardevs */
if (vma->vm_flags & (VM_IO | VM_PFNMAP) ||
- !(vm_flags & vma->vm_flags))
+ (!ignore && !(vm_flags & vma->vm_flags)))
goto finish_or_fault;
if (pages) {
@@ -174,6 +170,30 @@ int get_user_pages(struct task_struct *t
finish_or_fault:
return i ? : -EFAULT;
}
+
+
+/*
+ * get a list of pages in an address range belonging to the specified process
+ * and indicate the VMA that covers each page
+ * - this is potentially dodgy as we may end incrementing the page count of a
+ * slab page or a secondary page from a compound page
+ * - don't permit access to VMAs that don't support it, such as I/O mappings
+ */
+int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int write, int force,
+ struct page **pages, struct vm_area_struct **vmas)
+{
+ int flags = 0;
+
+ if (write)
+ flags |= GUP_FLAGS_WRITE;
+ if (force)
+ flags |= GUP_FLAGS_FORCE;
+
+ return __get_user_pages(tsk, mm,
+ start, len, flags,
+ pages, vmas);
+}
EXPORT_SYMBOL(get_user_pages);
DEFINE_RWLOCK(vmlist_lock);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [-mm][splitlru][PATCH 0/3] munlock rework
@ 2008-07-19 8:42 kosaki.motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 1/3] introduce __get_user_pages() kosaki.motohiro
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: kosaki.motohiro @ 2008-07-19 8:42 UTC (permalink / raw)
To: linux-mm, akpm
--
old munlock processing of unevictable-lru use pagewalk.
because get_user_pages() can't grab PROT_NONE page.
then, current -mm has two problem.
- build error on nommu machine
- runtime error on HIGHPTE machine.
So, I hope rework below concept
Old implementation
- use pagewalk
New implementation
- use __get_user_pages()
I tested this patch on
IA64: >24H stress workload
x86_64: ditto
x86_32 with HIGHPTE: only half hour
Li-san, Could you please try to this patch on your 32bit machine?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [-mm][splitlru][PATCH 1/3] introduce __get_user_pages()
2008-07-19 8:42 [-mm][splitlru][PATCH 0/3] munlock rework kosaki.motohiro
@ 2008-07-19 8:42 ` kosaki.motohiro
2008-07-19 7:47 ` KOSAKI Motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 2/3] split LRU: munlock rework kosaki.motohiro
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: kosaki.motohiro @ 2008-07-19 8:42 UTC (permalink / raw)
To: linux-mm, akpm
Cc: KOSAKI Motohiro, Li Zefan, Hugh Dickins, Lee Schermerhorn,
Rik van Riel
[-- Attachment #1: __get_user_pages.patch --]
[-- Type: text/plain, Size: 3336 bytes --]
new munlock processing need to GUP_FLAGS_IGNORE_VMA_PERMISSIONS.
because current get_user_pages() can't grab PROT_NONE pages theresore
it cause PROT_NONE pages can't munlock.
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Li Zefan <lizf@cn.fujitsu.com>
CC: Hugh Dickins <hugh@veritas.com>
CC: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
CC: Rik van Riel <riel@redhat.com>
---
mm/internal.h | 8 ++++++++
mm/memory.c | 37 +++++++++++++++++++++++++++++++------
2 files changed, 39 insertions(+), 6 deletions(-)
Index: b/mm/memory.c
===================================================================
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1108,12 +1108,17 @@ static inline int use_zero_page(struct v
return !vma->vm_ops || !vma->vm_ops->fault;
}
-int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
- unsigned long start, int len, int write, int force,
+
+
+int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int flags,
struct page **pages, struct vm_area_struct **vmas)
{
int i;
- unsigned int vm_flags;
+ unsigned int vm_flags = 0;
+ int write = !!(flags & GUP_FLAGS_WRITE);
+ int force = !!(flags & GUP_FLAGS_FORCE);
+ int ignore = !!(flags & GUP_FLAGS_IGNORE_VMA_PERMISSIONS);
if (len <= 0)
return 0;
@@ -1137,7 +1142,9 @@ int get_user_pages(struct task_struct *t
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
- if (write) /* user gate pages are read-only */
+
+ /* user gate pages are read-only */
+ if (!ignore && write)
return i ? : -EFAULT;
if (pg > TASK_SIZE)
pgd = pgd_offset_k(pg);
@@ -1169,8 +1176,9 @@ int get_user_pages(struct task_struct *t
continue;
}
- if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
- || !(vm_flags & vma->vm_flags))
+ if (!vma ||
+ (vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
+ (!ignore && !(vm_flags & vma->vm_flags)))
return i ? : -EFAULT;
if (is_vm_hugetlb_page(vma)) {
@@ -1245,6 +1253,23 @@ int get_user_pages(struct task_struct *t
} while (len);
return i;
}
+
+int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int write, int force,
+ struct page **pages, struct vm_area_struct **vmas)
+{
+ int flags = 0;
+
+ if (write)
+ flags |= GUP_FLAGS_WRITE;
+ if (force)
+ flags |= GUP_FLAGS_FORCE;
+
+ return __get_user_pages(tsk, mm,
+ start, len, flags,
+ pages, vmas);
+}
+
EXPORT_SYMBOL(get_user_pages);
pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr,
Index: b/mm/internal.h
===================================================================
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -243,4 +243,12 @@ static inline void mminit_validate_memmo
}
#endif /* CONFIG_SPARSEMEM */
+#define GUP_FLAGS_WRITE 0x1
+#define GUP_FLAGS_FORCE 0x2
+#define GUP_FLAGS_IGNORE_VMA_PERMISSIONS 0x4
+
+int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+ unsigned long start, int len, int flags,
+ struct page **pages, struct vm_area_struct **vmas);
+
#endif
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [-mm][splitlru][PATCH 2/3] split LRU: munlock rework
2008-07-19 8:42 [-mm][splitlru][PATCH 0/3] munlock rework kosaki.motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 1/3] introduce __get_user_pages() kosaki.motohiro
@ 2008-07-19 8:42 ` kosaki.motohiro
2008-07-19 14:41 ` Rik van Riel
2008-07-19 8:42 ` [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch kosaki.motohiro
2008-07-19 9:25 ` [-mm][splitlru][PATCH 0/3] munlock rework Li Zefan
3 siblings, 1 reply; 8+ messages in thread
From: kosaki.motohiro @ 2008-07-19 8:42 UTC (permalink / raw)
To: linux-mm, akpm
Cc: KOSAKI Motohiro, Li Zefan, Hugh Dickins, Lee Schermerhorn,
Rik van Riel
[-- Attachment #1: munlock-rework.patch --]
[-- Type: text/plain, Size: 7004 bytes --]
current munlock processing use to pagewalk.
its cause two problems.
- build error on nommu machine
- runtime error on HIGHPTE machine.
This patch fixes it.
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Li Zefan <lizf@cn.fujitsu.com>
CC: Hugh Dickins <hugh@veritas.com>
CC: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
CC: Rik van Riel <riel@redhat.com>
---
mm/mlock.c | 152 ++++++++++++++-----------------------------------------------
1 file changed, 35 insertions(+), 117 deletions(-)
Index: b/mm/mlock.c
===================================================================
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -147,18 +147,33 @@ static void munlock_vma_page(struct page
* vma->vm_mm->mmap_sem must be held for write.
*/
static int __mlock_vma_pages_range(struct vm_area_struct *vma,
- unsigned long start, unsigned long end)
+ unsigned long start, unsigned long end,
+ int mlock)
{
struct mm_struct *mm = vma->vm_mm;
unsigned long addr = start;
struct page *pages[16]; /* 16 gives a reasonable batch */
- int write = !!(vma->vm_flags & VM_WRITE);
int nr_pages = (end - start) / PAGE_SIZE;
int ret;
+ int gup_flags = 0;
+
+ VM_BUG_ON(start & ~PAGE_MASK);
+ VM_BUG_ON(end & ~PAGE_MASK);
+ VM_BUG_ON(start < vma->vm_start);
+ VM_BUG_ON(end > vma->vm_end);
+ VM_BUG_ON((!rwsem_is_locked(&mm->mmap_sem)) &&
+ (atomic_read(&mm->mm_users) != 0));
+
+ /*
+ * mlock: don't page populate if page has PROT_NONE permission.
+ * munlock: the pages always do munlock althrough
+ * its has PROT_NONE permission.
+ */
+ if (!mlock)
+ gup_flags |= GUP_FLAGS_IGNORE_VMA_PERMISSIONS;
- VM_BUG_ON(start & ~PAGE_MASK || end & ~PAGE_MASK);
- VM_BUG_ON(start < vma->vm_start || end > vma->vm_end);
- VM_BUG_ON(!rwsem_is_locked(&vma->vm_mm->mmap_sem));
+ if (vma->vm_flags & VM_WRITE)
+ gup_flags |= GUP_FLAGS_WRITE;
lru_add_drain_all(); /* push cached pages to LRU */
@@ -171,9 +186,9 @@ static int __mlock_vma_pages_range(struc
* get_user_pages makes pages present if we are
* setting mlock.
*/
- ret = get_user_pages(current, mm, addr,
+ ret = __get_user_pages(current, mm, addr,
min_t(int, nr_pages, ARRAY_SIZE(pages)),
- write, 0, pages, NULL);
+ gup_flags, pages, NULL);
/*
* This can happen for, e.g., VM_NONLINEAR regions before
* a page has been allocated and mapped at a given offset,
@@ -202,8 +217,12 @@ static int __mlock_vma_pages_range(struc
* us. Check after acquiring page lock.
*/
lock_page(page);
- if (page->mapping)
- mlock_vma_page(page);
+ if (page->mapping) {
+ if (mlock)
+ mlock_vma_page(page);
+ else
+ munlock_vma_page(page);
+ }
unlock_page(page);
put_page(page); /* ref from get_user_pages() */
@@ -221,120 +240,19 @@ static int __mlock_vma_pages_range(struc
return 0; /* count entire vma as locked_vm */
}
-/*
- * private structure for munlock page table walk
- */
-struct munlock_page_walk {
- struct vm_area_struct *vma;
- pmd_t *pmd; /* for migration_entry_wait() */
-};
-
-/*
- * munlock normal pages for present ptes
- */
-static int __munlock_pte_handler(pte_t *ptep, unsigned long addr,
- unsigned long end, struct mm_walk *walk)
-{
- struct munlock_page_walk *mpw = walk->private;
- swp_entry_t entry;
- struct page *page;
- pte_t pte;
-
-retry:
- pte = *ptep;
- /*
- * If it's a swap pte, we might be racing with page migration.
- */
- if (unlikely(!pte_present(pte))) {
- if (!is_swap_pte(pte))
- goto out;
- entry = pte_to_swp_entry(pte);
- if (is_migration_entry(entry)) {
- migration_entry_wait(mpw->vma->vm_mm, mpw->pmd, addr);
- goto retry;
- }
- goto out;
- }
-
- page = vm_normal_page(mpw->vma, addr, pte);
- if (!page)
- goto out;
-
- lock_page(page);
- if (!page->mapping) {
- unlock_page(page);
- goto retry;
- }
- munlock_vma_page(page);
- unlock_page(page);
-
-out:
- return 0;
-}
-
-/*
- * Save pmd for pte handler for waiting on migration entries
- */
-static int __munlock_pmd_handler(pmd_t *pmd, unsigned long addr,
- unsigned long end, struct mm_walk *walk)
-{
- struct munlock_page_walk *mpw = walk->private;
-
- mpw->pmd = pmd;
- return 0;
-}
-
-
-/*
- * munlock a range of pages in the vma using standard page table walk.
- *
- * vma->vm_mm->mmap_sem must be held for write.
- */
-static void __munlock_vma_pages_range(struct vm_area_struct *vma,
- unsigned long start, unsigned long end)
-{
- struct mm_struct *mm = vma->vm_mm;
- struct munlock_page_walk mpw = {
- .vma = vma,
- };
- struct mm_walk munlock_page_walk = {
- .pmd_entry = __munlock_pmd_handler,
- .pte_entry = __munlock_pte_handler,
- .private = &mpw,
- .mm = mm,
- };
-
- VM_BUG_ON(start & ~PAGE_MASK || end & ~PAGE_MASK);
- VM_BUG_ON((!rwsem_is_locked(&mm->mmap_sem)) &&
- (atomic_read(&mm->mm_users) != 0));
- VM_BUG_ON(start < vma->vm_start);
- VM_BUG_ON(end > vma->vm_end);
-
- lru_add_drain_all(); /* push cached pages to LRU */
- walk_page_range(start, end, &munlock_page_walk);
- lru_add_drain_all(); /* to update stats */
-}
-
#else /* CONFIG_UNEVICTABLE_LRU */
/*
* Just make pages present if VM_LOCKED. No-op if unlocking.
*/
static int __mlock_vma_pages_range(struct vm_area_struct *vma,
- unsigned long start, unsigned long end)
+ unsigned long start, unsigned long end,
+ int mlock)
{
- if (vma->vm_flags & VM_LOCKED)
+ if (mlock && (vma->vm_flags & VM_LOCKED))
make_pages_present(start, end);
return 0;
}
-
-/*
- * munlock a range of pages in the vma -- no-op.
- */
-static void __munlock_vma_pages_range(struct vm_area_struct *vma,
- unsigned long start, unsigned long end)
-{
-}
#endif /* CONFIG_UNEVICTABLE_LRU */
/*
@@ -357,7 +275,7 @@ int mlock_vma_pages_range(struct vm_area
is_vm_hugetlb_page(vma) ||
vma == get_gate_vma(current))) {
downgrade_write(&mm->mmap_sem);
- nr_pages = __mlock_vma_pages_range(vma, start, end);
+ nr_pages = __mlock_vma_pages_range(vma, start, end, 1);
up_read(&mm->mmap_sem);
/* vma can change or disappear */
@@ -392,7 +310,7 @@ void munlock_vma_pages_range(struct vm_a
unsigned long start, unsigned long end)
{
vma->vm_flags &= ~VM_LOCKED;
- __munlock_vma_pages_range(vma, start, end);
+ __mlock_vma_pages_range(vma, start, end, 0);
}
/*
@@ -469,7 +387,7 @@ success:
*/
downgrade_write(&mm->mmap_sem);
- ret = __mlock_vma_pages_range(vma, start, end);
+ ret = __mlock_vma_pages_range(vma, start, end, 1);
if (ret > 0) {
mm->locked_vm -= ret;
ret = 0;
@@ -495,7 +413,7 @@ success:
* while. Should we downgrade the semaphore for both lock
* AND unlock ?
*/
- __munlock_vma_pages_range(vma, start, end);
+ __mlock_vma_pages_range(vma, start, end, 0);
}
out:
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch
2008-07-19 8:42 [-mm][splitlru][PATCH 0/3] munlock rework kosaki.motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 1/3] introduce __get_user_pages() kosaki.motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 2/3] split LRU: munlock rework kosaki.motohiro
@ 2008-07-19 8:42 ` kosaki.motohiro
2008-07-19 14:41 ` Rik van Riel
2008-07-19 9:25 ` [-mm][splitlru][PATCH 0/3] munlock rework Li Zefan
3 siblings, 1 reply; 8+ messages in thread
From: kosaki.motohiro @ 2008-07-19 8:42 UTC (permalink / raw)
To: linux-mm, akpm
Cc: KOSAKI Motohiro, Li Zefan, Hugh Dickins, Lee Schermerhorn,
Rik van Riel
[-- Attachment #1: revert-kconfig.patch --]
[-- Type: text/plain, Size: 2187 bytes --]
CONFIG_UNEVICTABLE_LRU automatically turn on CONFIG_PAGE_WALKER.
it cause build error on nommu machine.
Now, it is unnecessary because munlock was rewritten.
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Li Zefan <lizf@cn.fujitsu.com>
CC: Hugh Dickins <hugh@veritas.com>
CC: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
CC: Rik van Riel <riel@redhat.com>
---
init/Kconfig | 1 -
mm/Kconfig | 5 -----
mm/Makefile | 2 +-
3 files changed, 1 insertion(+), 7 deletions(-)
Index: b/init/Kconfig
===================================================================
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -803,7 +803,6 @@ source "arch/Kconfig"
config PROC_PAGE_MONITOR
default y
depends on PROC_FS && MMU
- select PAGE_WALKER
bool "Enable /proc page monitoring" if EMBEDDED
help
Various /proc files exist to monitor process memory utilization:
Index: b/mm/Kconfig
===================================================================
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -209,14 +209,9 @@ config VIRT_TO_BUS
def_bool y
depends on !ARCH_NO_VIRT_TO_BUS
-# automatically selected by UNEVICTABLE_LRU or PROC_PAGE_MONITOR
-config PAGE_WALKER
- def_bool n
-
config UNEVICTABLE_LRU
bool "Add LRU list to track non-evictable pages"
default y
- select PAGE_WALKER
help
Keeps unevictable pages off of the active and inactive pageout
lists, so kswapd will not waste CPU time or have its balancing
Index: b/mm/Makefile
===================================================================
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -13,7 +13,7 @@ obj-y := bootmem.o filemap.o mempool.o
prio_tree.o util.o mmzone.o vmstat.o backing-dev.o \
page_isolation.o $(mmu-y)
-obj-$(CONFIG_PAGE_WALKER) += pagewalk.o
+obj-$(CONFIG_PROC_PAGE_MONITOR) += pagewalk.o
obj-$(CONFIG_BOUNCE) += bounce.o
obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o thrash.o
obj-$(CONFIG_HAS_DMA) += dmapool.o
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [-mm][splitlru][PATCH 0/3] munlock rework
2008-07-19 8:42 [-mm][splitlru][PATCH 0/3] munlock rework kosaki.motohiro
` (2 preceding siblings ...)
2008-07-19 8:42 ` [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch kosaki.motohiro
@ 2008-07-19 9:25 ` Li Zefan
3 siblings, 0 replies; 8+ messages in thread
From: Li Zefan @ 2008-07-19 9:25 UTC (permalink / raw)
To: kosaki.motohiro; +Cc: linux-mm, akpm
kosaki.motohiro@jp.fujitsu.com D'uA:
> old munlock processing of unevictable-lru use pagewalk.
> because get_user_pages() can't grab PROT_NONE page.
>
> then, current -mm has two problem.
> - build error on nommu machine
> - runtime error on HIGHPTE machine.
>
> So, I hope rework below concept
>
> Old implementation
> - use pagewalk
>
> New implementation
> - use __get_user_pages()
>
>
> I tested this patch on
> IA64: >24H stress workload
> x86_64: ditto
> x86_32 with HIGHPTE: only half hour
>
>
>
> Li-san, Could you please try to this patch on your 32bit machine?
I've tested this patchset, the bug disappeared and it survived the
ltp tests :) .
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [-mm][splitlru][PATCH 2/3] split LRU: munlock rework
2008-07-19 8:42 ` [-mm][splitlru][PATCH 2/3] split LRU: munlock rework kosaki.motohiro
@ 2008-07-19 14:41 ` Rik van Riel
0 siblings, 0 replies; 8+ messages in thread
From: Rik van Riel @ 2008-07-19 14:41 UTC (permalink / raw)
To: kosaki.motohiro; +Cc: linux-mm, akpm, Li Zefan, Hugh Dickins, Lee Schermerhorn
On Sat, 19 Jul 2008 17:42:15 +0900
kosaki.motohiro@jp.fujitsu.com wrote:
> current munlock processing use to pagewalk.
> its cause two problems.
> - build error on nommu machine
> - runtime error on HIGHPTE machine.
>
> This patch fixes it.
>
>
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: Rik van Riel <riel@redhat.com>
--
All rights reversed.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch
2008-07-19 8:42 ` [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch kosaki.motohiro
@ 2008-07-19 14:41 ` Rik van Riel
0 siblings, 0 replies; 8+ messages in thread
From: Rik van Riel @ 2008-07-19 14:41 UTC (permalink / raw)
To: kosaki.motohiro; +Cc: linux-mm, akpm, Li Zefan, Hugh Dickins, Lee Schermerhorn
On Sat, 19 Jul 2008 17:42:16 +0900
kosaki.motohiro@jp.fujitsu.com wrote:
> CONFIG_UNEVICTABLE_LRU automatically turn on CONFIG_PAGE_WALKER.
> it cause build error on nommu machine.
>
> Now, it is unnecessary because munlock was rewritten.
>
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: Rik van Riel <riel@redhat.com>
--
All rights reversed.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-07-19 14:41 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-19 8:42 [-mm][splitlru][PATCH 0/3] munlock rework kosaki.motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 1/3] introduce __get_user_pages() kosaki.motohiro
2008-07-19 7:47 ` KOSAKI Motohiro
2008-07-19 8:42 ` [-mm][splitlru][PATCH 2/3] split LRU: munlock rework kosaki.motohiro
2008-07-19 14:41 ` Rik van Riel
2008-07-19 8:42 ` [-mm][splitlru][PATCH 3/3] revert to unevictable-lru-infrastructure-kconfig-fix.patch kosaki.motohiro
2008-07-19 14:41 ` Rik van Riel
2008-07-19 9:25 ` [-mm][splitlru][PATCH 0/3] munlock rework Li Zefan
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.