mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-07-08 17:56:55 +00:00
37
mm/memory.c
37
mm/memory.c
@@ -2614,26 +2614,6 @@ out_page:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is like a special single-page "expand_downwards()",
|
||||
* except we must first make sure that 'address-PAGE_SIZE'
|
||||
* doesn't hit another vma.
|
||||
*
|
||||
* The "find_vma()" will do the right thing even if we wrap
|
||||
*/
|
||||
static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
|
||||
{
|
||||
address &= PAGE_MASK;
|
||||
if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
|
||||
address -= PAGE_SIZE;
|
||||
if (find_vma(vma->vm_mm, address) != vma)
|
||||
return -ENOMEM;
|
||||
|
||||
expand_stack(vma, address);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* We enter with non-exclusive mmap_sem (to exclude vma changes,
|
||||
* but allow concurrent faults), and pte mapped but not yet locked.
|
||||
@@ -2647,22 +2627,6 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
spinlock_t *ptl;
|
||||
pte_t entry;
|
||||
|
||||
pte_unmap(page_table);
|
||||
|
||||
/* Check if we need to add a guard page to the stack */
|
||||
if (check_stack_guard_page(vma, address) < 0)
|
||||
return VM_FAULT_SIGBUS;
|
||||
|
||||
/* Use the zero-page for reads */
|
||||
if (!(flags & FAULT_FLAG_WRITE)) {
|
||||
entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
|
||||
vma->vm_page_prot));
|
||||
page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
|
||||
if (!pte_none(*page_table))
|
||||
goto unlock;
|
||||
goto setpte;
|
||||
}
|
||||
|
||||
/* Allocate our own private page. */
|
||||
if (unlikely(anon_vma_prepare(vma)))
|
||||
goto oom;
|
||||
@@ -2683,7 +2647,6 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
goto release;
|
||||
inc_mm_counter(mm, anon_rss);
|
||||
page_add_new_anon_rmap(page, vma, address);
|
||||
setpte:
|
||||
set_pte_at(mm, address, page_table, entry);
|
||||
|
||||
/* No need to invalidate - it was non-present before */
|
||||
|
||||
Reference in New Issue
Block a user