diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2011-05-22 23:18:44 -0400 |
---|---|---|
committer | Nicolas Pitre <nicolas.pitre@linaro.org> | 2011-05-22 23:18:44 -0400 |
commit | 40eb35bb55b86951ce6a93a6937ceff2e0fc45f9 (patch) | |
tree | 9fb33d39df134e0ad19fd3f658a6cd2492201e9b /mm/memory.c | |
parent | c5aa2077c8bae6dcb5fc185b029fc084ec4a5202 (diff) | |
parent | 1c6dfdb912ee90ce3d20db20fec032e06a4315dd (diff) |
Merge commit 'v2.6.38.7' into linaro-2.6.38
Conflicts:
mm/memory.c
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/mm/memory.c b/mm/memory.c index 663d61a4f06..a5f3ffe9f71 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1418,9 +1418,8 @@ no_page_table: static inline int stack_guard_page(struct vm_area_struct *vma, unsigned long addr) { - return (vma->vm_flags & VM_GROWSDOWN) && - (vma->vm_start == addr) && - !vma_stack_continue(vma->vm_prev, addr); + return stack_guard_page_start(vma, addr) || + stack_guard_page_end(vma, addr+PAGE_SIZE); } int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, @@ -1508,12 +1507,6 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, continue; } - /* - * For mlock, just skip the stack guard page. - */ - if ((gup_flags & FOLL_MLOCK) && stack_guard_page(vma, start)) - goto next_page; - do { struct page *page; unsigned int foll_flags = gup_flags; @@ -1532,6 +1525,12 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, trace_page_fault_get_user_entry(mm, vma, start, foll_flags & FOLL_WRITE); + + /* For mlock, just skip the stack guard page. */ + if (foll_flags & FOLL_MLOCK) { + if (stack_guard_page(vma, start)) + goto next_page; + } if (foll_flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; if (nonblocking) |