[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>
This commit is contained in:
committed by
Linus Torvalds
parent
872fec16d9
commit
1bb3630e89
@@ -51,7 +51,6 @@ static pmd_t *alloc_new_pmd(struct mm_struct *mm, unsigned long addr)
|
||||
pgd_t *pgd;
|
||||
pud_t *pud;
|
||||
pmd_t *pmd = NULL;
|
||||
pte_t *pte;
|
||||
|
||||
/*
|
||||
* 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)
|
||||
if (!pmd)
|
||||
goto out;
|
||||
|
||||
pte = pte_alloc_map(mm, pmd, addr);
|
||||
if (!pte) {
|
||||
if (!pmd_present(*pmd) && __pte_alloc(mm, pmd, addr))
|
||||
pmd = NULL;
|
||||
goto out;
|
||||
}
|
||||
pte_unmap(pte);
|
||||
out:
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
return pmd;
|
||||
|
Reference in New Issue
Block a user