1 #include <linux/errno.h>
2 #include <linux/kernel.h>
5 #include <linux/slab.h>
6 #include <linux/sched.h>
8 struct kmem_cache
*task_xstate_cachep
;
10 int arch_dup_task_struct(struct task_struct
*dst
, struct task_struct
*src
)
13 if (src
->thread
.xstate
) {
14 dst
->thread
.xstate
= kmem_cache_alloc(task_xstate_cachep
,
16 if (!dst
->thread
.xstate
)
18 WARN_ON((unsigned long)dst
->thread
.xstate
& 15);
19 memcpy(dst
->thread
.xstate
, src
->thread
.xstate
, xstate_size
);
24 void free_thread_xstate(struct task_struct
*tsk
)
26 if (tsk
->thread
.xstate
) {
27 kmem_cache_free(task_xstate_cachep
, tsk
->thread
.xstate
);
28 tsk
->thread
.xstate
= NULL
;
32 void free_thread_info(struct thread_info
*ti
)
34 free_thread_xstate(ti
->task
);
35 free_pages((unsigned long)ti
, get_order(THREAD_SIZE
));
38 void arch_task_cache_init(void)
41 kmem_cache_create("task_xstate", xstate_size
,
42 __alignof__(union thread_xstate
),