diff options
author | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2007-08-03 07:29:01 -0400 |
---|---|---|
committer | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2007-08-15 10:36:56 -0400 |
commit | e7f3bac95e0bdfd520e065c4a29aad46190fcc99 (patch) | |
tree | c793a75643f183ccb083f1f309925a75c941df3f /include/asm-avr32 | |
parent | 5221b34edfd05ac35c077e071095cf853325320f (diff) |
[AVR32] Simplify pte_alloc_one{,_kernel}
There's really no need to retry an allocation with __GFP_REPEAT set.
Also, use get_zeroed_page() and __GFP_ZERO to eliminate the extra call
to clear_page() afterwards.
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Diffstat (limited to 'include/asm-avr32')
-rw-r--r-- | include/asm-avr32/pgalloc.h | 22 |
1 files changed, 2 insertions, 20 deletions
diff --git a/include/asm-avr32/pgalloc.h b/include/asm-avr32/pgalloc.h index 75248141c613..0e680f47209f 100644 --- a/include/asm-avr32/pgalloc.h +++ b/include/asm-avr32/pgalloc.h | |||
@@ -38,18 +38,9 @@ static inline void pgd_free(pgd_t *pgd) | |||
38 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 38 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
39 | unsigned long address) | 39 | unsigned long address) |
40 | { | 40 | { |
41 | int count = 0; | ||
42 | pte_t *pte; | 41 | pte_t *pte; |
43 | 42 | ||
44 | do { | 43 | pte = (pte_t *)get_zeroed_page(GFP_KERNEL | __GFP_REPEAT); |
45 | pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT); | ||
46 | if (pte) | ||
47 | clear_page(pte); | ||
48 | else { | ||
49 | current->state = TASK_UNINTERRUPTIBLE; | ||
50 | schedule_timeout(HZ); | ||
51 | } | ||
52 | } while (!pte && (count++ < 10)); | ||
53 | 44 | ||
54 | return pte; | 45 | return pte; |
55 | } | 46 | } |
@@ -57,18 +48,9 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | |||
57 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 48 | static inline struct page *pte_alloc_one(struct mm_struct *mm, |
58 | unsigned long address) | 49 | unsigned long address) |
59 | { | 50 | { |
60 | int count = 0; | ||
61 | struct page *pte; | 51 | struct page *pte; |
62 | 52 | ||
63 | do { | 53 | pte = alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); |
64 | pte = alloc_pages(GFP_KERNEL, 0); | ||
65 | if (pte) | ||
66 | clear_page(page_address(pte)); | ||
67 | else { | ||
68 | current->state = TASK_UNINTERRUPTIBLE; | ||
69 | schedule_timeout(HZ); | ||
70 | } | ||
71 | } while (!pte && (count++ < 10)); | ||
72 | 54 | ||
73 | return pte; | 55 | return pte; |
74 | } | 56 | } |