diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
| -rw-r--r-- | arch/powerpc/kernel/process.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 703100d5e458..6caad17ea72e 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -1033,3 +1033,34 @@ void ppc64_runlatch_off(void) | |||
| 1033 | } | 1033 | } |
| 1034 | } | 1034 | } |
| 1035 | #endif | 1035 | #endif |
| 1036 | |||
| 1037 | #if THREAD_SHIFT < PAGE_SHIFT | ||
| 1038 | |||
| 1039 | static struct kmem_cache *thread_info_cache; | ||
| 1040 | |||
| 1041 | struct thread_info *alloc_thread_info(struct task_struct *tsk) | ||
| 1042 | { | ||
| 1043 | struct thread_info *ti; | ||
| 1044 | |||
| 1045 | ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL); | ||
| 1046 | if (unlikely(ti == NULL)) | ||
| 1047 | return NULL; | ||
| 1048 | #ifdef CONFIG_DEBUG_STACK_USAGE | ||
| 1049 | memset(ti, 0, THREAD_SIZE); | ||
| 1050 | #endif | ||
| 1051 | return ti; | ||
| 1052 | } | ||
| 1053 | |||
| 1054 | void free_thread_info(struct thread_info *ti) | ||
| 1055 | { | ||
| 1056 | kmem_cache_free(thread_info_cache, ti); | ||
| 1057 | } | ||
| 1058 | |||
| 1059 | void thread_info_cache_init(void) | ||
| 1060 | { | ||
| 1061 | thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, | ||
| 1062 | THREAD_SIZE, 0, NULL); | ||
| 1063 | BUG_ON(thread_info_cache == NULL); | ||
| 1064 | } | ||
| 1065 | |||
| 1066 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ | ||
