signal/powerpc: Replace FPE_FIXME with FPE_FLTUNK

Using an si_code of 0 that aliases with SI_USER is clearly the
wrong thing todo, and causes problems in interesting ways.

The newly defined FPE_FLTUNK semantically appears to fit the
bill so use it instead.

Cc: Paul Mackerras <paulus@samba.org>
Cc: Kumar Gala <kumar.gala@freescale.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc:  linuxppc-dev@lists.ozlabs.org
Fixes: 9bad068c24d7 ("[PATCH] ppc32: support for e500 and 85xx")
Fixes: 0ed70f6105ef ("PPC32: Provide proper siginfo information on various exceptions.")
History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
Eric W. Biederman 2018-04-17 15:30:54 -05:00
parent 51dd709fee
commit aeb1c0f6ff
2 changed files with 3 additions and 10 deletions

View File

@ -15,13 +15,6 @@
#include <asm-generic/siginfo.h> #include <asm-generic/siginfo.h>
/*
* SIGFPE si_codes
*/
#ifdef __KERNEL__
#define FPE_FIXME 0 /* Broken dup of SI_USER */
#endif /* __KERNEL__ */
/* /*
* SIGTRAP si_codes * SIGTRAP si_codes
*/ */

View File

@ -1031,7 +1031,7 @@ static void emulate_single_step(struct pt_regs *regs)
static inline int __parse_fpscr(unsigned long fpscr) static inline int __parse_fpscr(unsigned long fpscr)
{ {
int ret = FPE_FIXME; int ret = FPE_FLTUNK;
/* Invalid operation */ /* Invalid operation */
if ((fpscr & FPSCR_VE) && (fpscr & FPSCR_VX)) if ((fpscr & FPSCR_VE) && (fpscr & FPSCR_VX))
@ -1972,7 +1972,7 @@ void SPEFloatingPointException(struct pt_regs *regs)
extern int do_spe_mathemu(struct pt_regs *regs); extern int do_spe_mathemu(struct pt_regs *regs);
unsigned long spefscr; unsigned long spefscr;
int fpexc_mode; int fpexc_mode;
int code = FPE_FIXME; int code = FPE_FLTUNK;
int err; int err;
flush_spe_to_thread(current); flush_spe_to_thread(current);
@ -2041,7 +2041,7 @@ void SPEFloatingPointRoundException(struct pt_regs *regs)
printk(KERN_ERR "unrecognized spe instruction " printk(KERN_ERR "unrecognized spe instruction "
"in %s at %lx\n", current->comm, regs->nip); "in %s at %lx\n", current->comm, regs->nip);
} else { } else {
_exception(SIGFPE, regs, FPE_FIXME, regs->nip); _exception(SIGFPE, regs, FPE_FLTUNK, regs->nip);
return; return;
} }
} }