aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2006-03-22 03:08:04 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-22 10:53:57 -0500
commit8e7a9aae91101916b86de07fafe3272ea8dc1f10 (patch)
tree799beb54db0ec0b6c58c5d6cdc902fa570f8be90 /arch
parent8dc04efbfb3c08a08fb7a3b97348d5d561b26ae2 (diff)
[PATCH] xtensa: pgtable fixes
- Don't return uninitialised stack values in case of allocation failure - Don't bother clearing PageCompound because __GFP_COMP wasn't specified Increment over the pte page rather than one pte entry in pte_alloc_one_kernel - Actually increment the page pointer in pte_alloc_one - Compile fixes, typos. Signed-off-by: Nick Piggin <npiggin@suse.de> Acked-by: Chris Zankel <chris@zankel.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/xtensa/mm/pgtable.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/xtensa/mm/pgtable.c b/arch/xtensa/mm/pgtable.c
index e5e119c820e4..cbc56aedf13e 100644
--- a/arch/xtensa/mm/pgtable.c
+++ b/arch/xtensa/mm/pgtable.c
@@ -14,7 +14,7 @@
14 14
15pte_t* pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 15pte_t* pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
16{ 16{
17 pte_t *pte, p; 17 pte_t *pte = NULL, *p;
18 int color = ADDR_COLOR(address); 18 int color = ADDR_COLOR(address);
19 int i; 19 int i;
20 20
@@ -23,16 +23,16 @@ pte_t* pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
23 if (likely(p)) { 23 if (likely(p)) {
24 struct page *page; 24 struct page *page;
25 25
26 for (i = 0; i < COLOR_SIZE; i++, p++) { 26 for (i = 0; i < COLOR_SIZE; i++) {
27 page = virt_to_page(pte); 27 page = virt_to_page(p);
28 28
29 set_page_count(page, 1); 29 set_page_count(page, 1);
30 ClearPageCompound(page);
31 30
32 if (ADDR_COLOR(p) == color) 31 if (ADDR_COLOR(p) == color)
33 pte = p; 32 pte = p;
34 else 33 else
35 free_page(p); 34 free_page(p);
35 p += PTRS_PER_PTE;
36 } 36 }
37 clear_page(pte); 37 clear_page(pte);
38 } 38 }
@@ -49,7 +49,7 @@ int flush;
49 49
50struct page* pte_alloc_one(struct mm_struct *mm, unsigned long address) 50struct page* pte_alloc_one(struct mm_struct *mm, unsigned long address)
51{ 51{
52 struct page *page, p; 52 struct page *page = NULL, *p;
53 int color = ADDR_COLOR(address); 53 int color = ADDR_COLOR(address);
54 54
55 p = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER); 55 p = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER);
@@ -57,12 +57,12 @@ struct page* pte_alloc_one(struct mm_struct *mm, unsigned long address)
57 if (likely(p)) { 57 if (likely(p)) {
58 for (i = 0; i < PAGE_ORDER; i++) { 58 for (i = 0; i < PAGE_ORDER; i++) {
59 set_page_count(p, 1); 59 set_page_count(p, 1);
60 ClearPageCompound(p);
61 60
62 if (PADDR_COLOR(page_address(pg)) == color) 61 if (PADDR_COLOR(page_address(p)) == color)
63 page = p; 62 page = p;
64 else 63 else
65 free_page(p); 64 __free_page(p);
65 p++;
66 } 66 }
67 clear_highpage(page); 67 clear_highpage(page);
68 } 68 }