License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-block.git] / arch / sh / kernel / process.c
CommitLineData
b2441318 1// SPDX-License-Identifier: GPL-2.0
cbf6b1ba
PM
2#include <linux/mm.h>
3#include <linux/kernel.h>
5a0e3ad6 4#include <linux/slab.h>
174cd4b1 5#include <linux/sched/signal.h>
68db0cf1 6#include <linux/sched/task_stack.h>
5d920bb9
FA
7#include <linux/export.h>
8#include <linux/stackprotector.h>
936c163a 9#include <asm/fpu.h>
4cf421e5 10#include <asm/ptrace.h>
cbf6b1ba 11
0ea820cf
PM
12struct kmem_cache *task_xstate_cachep = NULL;
13unsigned int xstate_size;
14
5d920bb9
FA
15#ifdef CONFIG_CC_STACKPROTECTOR
16unsigned long __stack_chk_guard __read_mostly;
17EXPORT_SYMBOL(__stack_chk_guard);
18#endif
19
55ccf3fe
SS
20/*
21 * this gets called so that we can store lazy state into memory and copy the
22 * current task into the new thread.
23 */
0ea820cf
PM
24int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
25{
55ccf3fe
SS
26#ifdef CONFIG_SUPERH32
27 unlazy_fpu(src, task_pt_regs(src));
28#endif
0ea820cf
PM
29 *dst = *src;
30
31 if (src->thread.xstate) {
32 dst->thread.xstate = kmem_cache_alloc(task_xstate_cachep,
33 GFP_KERNEL);
34 if (!dst->thread.xstate)
35 return -ENOMEM;
36 memcpy(dst->thread.xstate, src->thread.xstate, xstate_size);
37 }
38
39 return 0;
40}
41
42void free_thread_xstate(struct task_struct *tsk)
43{
44 if (tsk->thread.xstate) {
45 kmem_cache_free(task_xstate_cachep, tsk->thread.xstate);
46 tsk->thread.xstate = NULL;
47 }
48}
49
df9a7b9b 50void arch_release_task_struct(struct task_struct *tsk)
cbf6b1ba 51{
df9a7b9b 52 free_thread_xstate(tsk);
cbf6b1ba 53}
0ea820cf
PM
54
55void arch_task_cache_init(void)
56{
57 if (!xstate_size)
58 return;
59
60 task_xstate_cachep = kmem_cache_create("task_xstate", xstate_size,
61 __alignof__(union thread_xstate),
62 SLAB_PANIC | SLAB_NOTRACK, NULL);
63}
64
65#ifdef CONFIG_SH_FPU_EMU
66# define HAVE_SOFTFP 1
67#else
68# define HAVE_SOFTFP 0
69#endif
70
4603f53a 71void init_thread_xstate(void)
0ea820cf
PM
72{
73 if (boot_cpu_data.flags & CPU_HAS_FPU)
74 xstate_size = sizeof(struct sh_fpu_hard_struct);
75 else if (HAVE_SOFTFP)
76 xstate_size = sizeof(struct sh_fpu_soft_struct);
77 else
78 xstate_size = 0;
79}