diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2013-11-14 14:31:42 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 09:32:19 +0900 |
commit | 1ae9ae5f7df726c67736c643c1f03f7bdfe748eb (patch) | |
tree | ea4172be40418472c7172de9f8d6e0796a846467 /arch/sparc/mm/init_64.c | |
parent | 478cf8ca013f9e33be978dee4d0a15906e5a030a (diff) | |
download | lwn-1ae9ae5f7df726c67736c643c1f03f7bdfe748eb.tar.gz lwn-1ae9ae5f7df726c67736c643c1f03f7bdfe748eb.zip |
sparc: handle pgtable_page_ctor() fail
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/sparc/mm/init_64.c')
-rw-r--r-- | arch/sparc/mm/init_64.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index ed82edad1a39..d6de9353ee11 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -2519,12 +2519,13 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, return pte; page = __alloc_for_cache(mm); - if (page) { - pgtable_page_ctor(page); - pte = (pte_t *) page_address(page); + if (!page) + return NULL; + if (!pgtable_page_ctor(page)) { + free_hot_cold_page(page, 0); + return NULL; } - - return pte; + return (pte_t *) page_address(page); } void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |