diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2005-10-24 00:05:38 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-27 06:51:13 -0400 |
commit | 328985b2c69d2592edd7f181a6b7360e51b08515 (patch) | |
tree | 62092de50dafd4b3db3513b45868c837915b8108 /include/asm-powerpc | |
parent | 2765ca254060adb9a5abc2cfc6264b8daafc5742 (diff) |
[PATCH] powerpc: Don't use kmalloc() for kernel stacks
In readiness for 64k pages, when THREAD_SIZE will be less than
PAGE_SIZE, ppc64 uses kmalloc() rather than __get_free_pages() to
allocate kernel stacks, and since thread_info.h was merged, so does
ppc32. However that adds some overhead which we don't really want
when PAGE_SIZE <= THREAD_SIZE (including all ppc32 machines), so this
patch avoids it.
Signed-off-by: David Gibson <dwg@au1.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r-- | include/asm-powerpc/thread_info.h | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h index 0b4c24551c21..ab17db79f69d 100644 --- a/include/asm-powerpc/thread_info.h +++ b/include/asm-powerpc/thread_info.h | |||
@@ -66,19 +66,26 @@ struct thread_info { | |||
66 | /* thread information allocation */ | 66 | /* thread information allocation */ |
67 | 67 | ||
68 | #ifdef CONFIG_DEBUG_STACK_USAGE | 68 | #ifdef CONFIG_DEBUG_STACK_USAGE |
69 | #define alloc_thread_info(tsk) \ | 69 | #define THREAD_INFO_GFP GFP_KERNEL | __GFP_ZERO |
70 | ({ \ | ||
71 | struct thread_info *ret; \ | ||
72 | \ | ||
73 | ret = kmalloc(THREAD_SIZE, GFP_KERNEL); \ | ||
74 | if (ret) \ | ||
75 | memset(ret, 0, THREAD_SIZE); \ | ||
76 | ret; \ | ||
77 | }) | ||
78 | #else | 70 | #else |
79 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) | 71 | #define THREAD_INFO_GFP GFP_KERNEL |
80 | #endif | 72 | #endif |
73 | |||
74 | #if THREAD_SHIFT >= PAGE_SHIFT | ||
75 | |||
76 | #define THREAD_ORDER (THREAD_SHIFT - PAGE_SHIFT) | ||
77 | |||
78 | #define alloc_thread_info(tsk) \ | ||
79 | ((struct thread_info *)__get_free_pages(THREAD_INFO_GFP, THREAD_ORDER)) | ||
80 | #define free_thread_info(ti) free_pages((unsigned long)ti, THREAD_ORDER) | ||
81 | |||
82 | #else /* THREAD_SHIFT < PAGE_SHIFT */ | ||
83 | |||
84 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, THREAD_INFO_GFP) | ||
81 | #define free_thread_info(ti) kfree(ti) | 85 | #define free_thread_info(ti) kfree(ti) |
86 | |||
87 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ | ||
88 | |||
82 | #define get_thread_info(ti) get_task_struct((ti)->task) | 89 | #define get_thread_info(ti) get_task_struct((ti)->task) |
83 | #define put_thread_info(ti) put_task_struct((ti)->task) | 90 | #define put_thread_info(ti) put_task_struct((ti)->task) |
84 | 91 | ||