diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2013-11-14 17:31:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-14 19:32:19 -0500 |
commit | e90bedbb8a847a0e6debe0e00b6f69b788fca92e (patch) | |
tree | db0527ed2027b15022d86493f30e15ee8e6ad334 /arch/unicore32 | |
parent | 647f884e67dd920e01046a1ae87aa2c2d315479a (diff) |
unicore32: handle pgtable_page_ctor() fail
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/unicore32')
-rw-r--r-- | arch/unicore32/include/asm/pgalloc.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/unicore32/include/asm/pgalloc.h b/arch/unicore32/include/asm/pgalloc.h index 0213e373a895..2e02d1356fdf 100644 --- a/arch/unicore32/include/asm/pgalloc.h +++ b/arch/unicore32/include/asm/pgalloc.h | |||
@@ -51,12 +51,14 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr) | |||
51 | struct page *pte; | 51 | struct page *pte; |
52 | 52 | ||
53 | pte = alloc_pages(PGALLOC_GFP, 0); | 53 | pte = alloc_pages(PGALLOC_GFP, 0); |
54 | if (pte) { | 54 | if (!pte) |
55 | if (!PageHighMem(pte)) { | 55 | return NULL; |
56 | void *page = page_address(pte); | 56 | if (!PageHighMem(pte)) { |
57 | clean_dcache_area(page, PTRS_PER_PTE * sizeof(pte_t)); | 57 | void *page = page_address(pte); |
58 | } | 58 | clean_dcache_area(page, PTRS_PER_PTE * sizeof(pte_t)); |
59 | pgtable_page_ctor(pte); | 59 | } |
60 | if (!pgtable_page_ctor(pte)) { | ||
61 | __free_page(pte); | ||
60 | } | 62 | } |
61 | 63 | ||
62 | return pte; | 64 | return pte; |