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 | |
| 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>
| -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 | } |
