aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mremap.c
diff options
context:
space:
mode:
authorHugh Dickins <hugh@veritas.com>2005-10-29 21:16:22 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-30 00:40:40 -0400
commit1bb3630e89cb8a7b3d3807629c20c5bad88290ff (patch)
tree3d1fd73487ca66f227701b9530f2c76fcc6f9da4 /mm/mremap.c
parent872fec16d9a0ed3b75b8893aa217e49cca575ee5 (diff)
[PATCH] mm: ptd_alloc inline and out
It seems odd to me that, whereas pud_alloc and pmd_alloc test inline, only calling out-of-line __pud_alloc __pmd_alloc if allocation needed, pte_alloc_map and pte_alloc_kernel are entirely out-of-line. Though it does add a little to kernel size, change them to macros testing inline, calling __pte_alloc or __pte_alloc_kernel to allocate out-of-line. Mark none of them as fastcalls, leave that to CONFIG_REGPARM or not. It also seems more natural for the out-of-line functions to leave the offset calculation and map to the inline, which has to do it anyway for the common case. At least mremap move wants __pte_alloc without _map. Macros rather than inline functions, certainly to avoid the header file issues which arise from CONFIG_HIGHPTE needing kmap_types.h, but also in case any architectures I haven't built would have other such problems. Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/mremap.c')
-rw-r--r--mm/mremap.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/mm/mremap.c b/mm/mremap.c
index ccf456477020..616facc3d28a 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -51,7 +51,6 @@ static pmd_t *alloc_new_pmd(struct mm_struct *mm, unsigned long addr)
51 pgd_t *pgd; 51 pgd_t *pgd;
52 pud_t *pud; 52 pud_t *pud;
53 pmd_t *pmd = NULL; 53 pmd_t *pmd = NULL;
54 pte_t *pte;
55 54
56 /* 55 /*
57 * We do need page_table_lock: because allocators expect that. 56 * We do need page_table_lock: because allocators expect that.
@@ -66,12 +65,8 @@ static pmd_t *alloc_new_pmd(struct mm_struct *mm, unsigned long addr)
66 if (!pmd) 65 if (!pmd)
67 goto out; 66 goto out;
68 67
69 pte = pte_alloc_map(mm, pmd, addr); 68 if (!pmd_present(*pmd) && __pte_alloc(mm, pmd, addr))
70 if (!pte) {
71 pmd = NULL; 69 pmd = NULL;
72 goto out;
73 }
74 pte_unmap(pte);
75out: 70out:
76 spin_unlock(&mm->page_table_lock); 71 spin_unlock(&mm->page_table_lock);
77 return pmd; 72 return pmd;