diff options
author | Hugh Dickins <hugh@veritas.com> | 2005-10-29 21:16:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 00:40:40 -0400 |
commit | 1bb3630e89cb8a7b3d3807629c20c5bad88290ff (patch) | |
tree | 3d1fd73487ca66f227701b9530f2c76fcc6f9da4 /mm/mremap.c | |
parent | 872fec16d9a0ed3b75b8893aa217e49cca575ee5 (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.c | 7 |
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); | ||
75 | out: | 70 | out: |
76 | spin_unlock(&mm->page_table_lock); | 71 | spin_unlock(&mm->page_table_lock); |
77 | return pmd; | 72 | return pmd; |