summaryrefslogtreecommitdiff
path: root/arch/openrisc/kernel/signal.c
diff options
context:
space:
mode:
authorStafford Horne <shorne@gmail.com>2023-04-14 08:27:51 +0100
committerStafford Horne <shorne@gmail.com>2023-04-26 15:08:06 +0100
commit27267655c5313ba0f5a3caa9ad35d887d9a12574 (patch)
treed72bb9628b509240ca045f77f9bfc98c4680cb0d /arch/openrisc/kernel/signal.c
parent63d7f9f11e5e81de2ce8f1c7a8aaed5b0288eddf (diff)
downloadlinux-27267655c5313ba0f5a3caa9ad35d887d9a12574.tar.gz
linux-27267655c5313ba0f5a3caa9ad35d887d9a12574.tar.bz2
linux-27267655c5313ba0f5a3caa9ad35d887d9a12574.zip
openrisc: Support floating point user api
Add support for handling floating point exceptions and forwarding the SIGFPE signal to processes. Also, add fpu state to sigcontext. Signed-off-by: Stafford Horne <shorne@gmail.com>
Diffstat (limited to 'arch/openrisc/kernel/signal.c')
-rw-r--r--arch/openrisc/kernel/signal.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c
index 80f69740c731..4664a18f0787 100644
--- a/arch/openrisc/kernel/signal.c
+++ b/arch/openrisc/kernel/signal.c
@@ -50,6 +50,7 @@ static int restore_sigcontext(struct pt_regs *regs,
err |= __copy_from_user(regs, sc->regs.gpr, 32 * sizeof(unsigned long));
err |= __copy_from_user(&regs->pc, &sc->regs.pc, sizeof(unsigned long));
err |= __copy_from_user(&regs->sr, &sc->regs.sr, sizeof(unsigned long));
+ err |= __copy_from_user(&regs->fpcsr, &sc->fpu.fpcsr, sizeof(unsigned long));
/* make sure the SM-bit is cleared so user-mode cannot fool us */
regs->sr &= ~SPR_SR_SM;
@@ -112,6 +113,7 @@ static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
err |= __copy_to_user(sc->regs.gpr, regs, 32 * sizeof(unsigned long));
err |= __copy_to_user(&sc->regs.pc, &regs->pc, sizeof(unsigned long));
err |= __copy_to_user(&sc->regs.sr, &regs->sr, sizeof(unsigned long));
+ err |= __copy_to_user(&sc->fpu.fpcsr, &regs->fpcsr, sizeof(unsigned long));
return err;
}