diff options
Diffstat (limited to 'arch/arm/kernel/process.c')
| -rw-r--r-- | arch/arm/kernel/process.c | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index bf35c178a877..a9e8f7e55fd6 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
| @@ -281,67 +281,6 @@ void show_fpregs(struct user_fp *regs) | |||
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | /* | 283 | /* |
| 284 | * Task structure and kernel stack allocation. | ||
| 285 | */ | ||
| 286 | struct thread_info_list { | ||
| 287 | unsigned long *head; | ||
| 288 | unsigned int nr; | ||
| 289 | }; | ||
| 290 | |||
| 291 | static DEFINE_PER_CPU(struct thread_info_list, thread_info_list) = { NULL, 0 }; | ||
| 292 | |||
| 293 | #define EXTRA_TASK_STRUCT 4 | ||
| 294 | |||
| 295 | struct thread_info *alloc_thread_info(struct task_struct *task) | ||
| 296 | { | ||
| 297 | struct thread_info *thread = NULL; | ||
| 298 | |||
| 299 | if (EXTRA_TASK_STRUCT) { | ||
| 300 | struct thread_info_list *th = &get_cpu_var(thread_info_list); | ||
| 301 | unsigned long *p = th->head; | ||
| 302 | |||
| 303 | if (p) { | ||
| 304 | th->head = (unsigned long *)p[0]; | ||
| 305 | th->nr -= 1; | ||
| 306 | } | ||
| 307 | put_cpu_var(thread_info_list); | ||
| 308 | |||
| 309 | thread = (struct thread_info *)p; | ||
| 310 | } | ||
| 311 | |||
| 312 | if (!thread) | ||
| 313 | thread = (struct thread_info *) | ||
| 314 | __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER); | ||
| 315 | |||
| 316 | #ifdef CONFIG_DEBUG_STACK_USAGE | ||
| 317 | /* | ||
| 318 | * The stack must be cleared if you want SYSRQ-T to | ||
| 319 | * give sensible stack usage information | ||
| 320 | */ | ||
| 321 | if (thread) | ||
| 322 | memzero(thread, THREAD_SIZE); | ||
| 323 | #endif | ||
| 324 | return thread; | ||
| 325 | } | ||
| 326 | |||
| 327 | void free_thread_info(struct thread_info *thread) | ||
| 328 | { | ||
| 329 | if (EXTRA_TASK_STRUCT) { | ||
| 330 | struct thread_info_list *th = &get_cpu_var(thread_info_list); | ||
| 331 | if (th->nr < EXTRA_TASK_STRUCT) { | ||
| 332 | unsigned long *p = (unsigned long *)thread; | ||
| 333 | p[0] = (unsigned long)th->head; | ||
| 334 | th->head = p; | ||
| 335 | th->nr += 1; | ||
| 336 | put_cpu_var(thread_info_list); | ||
| 337 | return; | ||
| 338 | } | ||
| 339 | put_cpu_var(thread_info_list); | ||
| 340 | } | ||
| 341 | free_pages((unsigned long)thread, THREAD_SIZE_ORDER); | ||
| 342 | } | ||
| 343 | |||
| 344 | /* | ||
| 345 | * Free current thread data structures etc.. | 284 | * Free current thread data structures etc.. |
| 346 | */ | 285 | */ |
| 347 | void exit_thread(void) | 286 | void exit_thread(void) |
