diff options
Diffstat (limited to 'arch/sh/kernel/signal_32.c')
| -rw-r--r-- | arch/sh/kernel/signal_32.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c index 6729703547a1..3db37425210d 100644 --- a/arch/sh/kernel/signal_32.c +++ b/arch/sh/kernel/signal_32.c | |||
| @@ -145,7 +145,7 @@ static inline int restore_sigcontext_fpu(struct sigcontext __user *sc) | |||
| 145 | { | 145 | { |
| 146 | struct task_struct *tsk = current; | 146 | struct task_struct *tsk = current; |
| 147 | 147 | ||
| 148 | if (!(current_cpu_data.flags & CPU_HAS_FPU)) | 148 | if (!(boot_cpu_data.flags & CPU_HAS_FPU)) |
| 149 | return 0; | 149 | return 0; |
| 150 | 150 | ||
| 151 | set_used_math(); | 151 | set_used_math(); |
| @@ -158,7 +158,7 @@ static inline int save_sigcontext_fpu(struct sigcontext __user *sc, | |||
| 158 | { | 158 | { |
| 159 | struct task_struct *tsk = current; | 159 | struct task_struct *tsk = current; |
| 160 | 160 | ||
| 161 | if (!(current_cpu_data.flags & CPU_HAS_FPU)) | 161 | if (!(boot_cpu_data.flags & CPU_HAS_FPU)) |
| 162 | return 0; | 162 | return 0; |
| 163 | 163 | ||
| 164 | if (!used_math()) { | 164 | if (!used_math()) { |
| @@ -199,7 +199,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p | |||
| 199 | #undef COPY | 199 | #undef COPY |
| 200 | 200 | ||
| 201 | #ifdef CONFIG_SH_FPU | 201 | #ifdef CONFIG_SH_FPU |
| 202 | if (current_cpu_data.flags & CPU_HAS_FPU) { | 202 | if (boot_cpu_data.flags & CPU_HAS_FPU) { |
| 203 | int owned_fp; | 203 | int owned_fp; |
| 204 | struct task_struct *tsk = current; | 204 | struct task_struct *tsk = current; |
| 205 | 205 | ||
| @@ -472,6 +472,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 472 | err |= __put_user(OR_R0_R0, &frame->retcode[6]); | 472 | err |= __put_user(OR_R0_R0, &frame->retcode[6]); |
| 473 | err |= __put_user((__NR_rt_sigreturn), &frame->retcode[7]); | 473 | err |= __put_user((__NR_rt_sigreturn), &frame->retcode[7]); |
| 474 | regs->pr = (unsigned long) frame->retcode; | 474 | regs->pr = (unsigned long) frame->retcode; |
| 475 | flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); | ||
| 475 | } | 476 | } |
| 476 | 477 | ||
| 477 | if (err) | 478 | if (err) |
| @@ -497,8 +498,6 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 497 | pr_debug("SIG deliver (%s:%d): sp=%p pc=%08lx pr=%08lx\n", | 498 | pr_debug("SIG deliver (%s:%d): sp=%p pc=%08lx pr=%08lx\n", |
| 498 | current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); | 499 | current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); |
| 499 | 500 | ||
| 500 | flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); | ||
| 501 | |||
| 502 | return 0; | 501 | return 0; |
| 503 | 502 | ||
| 504 | give_sigsegv: | 503 | give_sigsegv: |
