Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aeb1c0f6 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

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: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 51dd709f
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -15,13 +15,6 @@

#include <asm-generic/siginfo.h>

/*
 * SIGFPE si_codes
 */
#ifdef __KERNEL__
#define FPE_FIXME	0	/* Broken dup of SI_USER */
#endif /* __KERNEL__ */

/*
 * SIGTRAP si_codes
 */
+3 −3
Original line number Diff line number Diff line
@@ -1031,7 +1031,7 @@ static void emulate_single_step(struct pt_regs *regs)

static inline int __parse_fpscr(unsigned long fpscr)
{
	int ret = FPE_FIXME;
	int ret = FPE_FLTUNK;

	/* Invalid operation */
	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);
	unsigned long spefscr;
	int fpexc_mode;
	int code = FPE_FIXME;
	int code = FPE_FLTUNK;
	int err;

	flush_spe_to_thread(current);
@@ -2041,7 +2041,7 @@ void SPEFloatingPointRoundException(struct pt_regs *regs)
		printk(KERN_ERR "unrecognized spe instruction "
		       "in %s at %lx\n", current->comm, regs->nip);
	} else {
		_exception(SIGFPE, regs, FPE_FIXME, regs->nip);
		_exception(SIGFPE, regs, FPE_FLTUNK, regs->nip);
		return;
	}
}