]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/x86/kernel/process.c
ead24efbcba04f7404c621815b21f0aab01d7fcf
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / process.c
1 #include <linux/errno.h>
2 #include <linux/kernel.h>
3 #include <linux/mm.h>
4 #include <linux/smp.h>
5 #include <linux/slab.h>
6 #include <linux/sched.h>
7
8 static struct kmem_cache *task_xstate_cachep;
9
10 int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
11 {
12         *dst = *src;
13         dst->thread.xstate = kmem_cache_alloc(task_xstate_cachep, GFP_KERNEL);
14         if (!dst->thread.xstate)
15                 return -ENOMEM;
16         WARN_ON((unsigned long)dst->thread.xstate & 15);
17         memcpy(dst->thread.xstate, src->thread.xstate, xstate_size);
18         return 0;
19 }
20
21 void free_thread_info(struct thread_info *ti)
22 {
23         kmem_cache_free(task_xstate_cachep, ti->task->thread.xstate);
24         ti->task->thread.xstate = NULL;
25
26         free_pages((unsigned long)(ti), get_order(THREAD_SIZE));
27 }
28
29 void arch_task_cache_init(void)
30 {
31         task_xstate_cachep =
32                 kmem_cache_create("task_xstate", xstate_size,
33                                   __alignof__(union thread_xstate),
34                                   SLAB_PANIC, NULL);
35 }