提交 7c6f2514 编写于 作者: D Daniel Jacobowitz 提交者: Russell King

[ARM] 3748/3: Correct error check in vfp_raise_exceptions

Patch from Daniel Jacobowitz

The recent fix to hide VFP_NAN_FLAG broke the check in vfp_raise_exceptions;
it would attempt to deliver an exception mask of 0xfffffeff instead of reporting
a serious error condition using printk.  Define a safe constant to use for
an invalid exception maskm, and use it at both ends.
Signed-off-by: NDaniel Jacobowitz <dan@codesourcery.com>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 3a13813e
...@@ -353,3 +353,11 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand); ...@@ -353,3 +353,11 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand);
* A special flag to tell the normalisation code not to normalise. * A special flag to tell the normalisation code not to normalise.
*/ */
#define VFP_NAN_FLAG 0x100 #define VFP_NAN_FLAG 0x100
/*
* A bit pattern used to indicate the initial (unset) value of the
* exception mask, in case nothing handles an instruction. This
* doesn't include the NAN flag, which get masked out before
* we check for an error.
*/
#define VFP_EXCEPTION_ERROR ((u32)-1 & ~VFP_NAN_FLAG)
...@@ -131,7 +131,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ ...@@ -131,7 +131,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_
pr_debug("VFP: raising exceptions %08x\n", exceptions); pr_debug("VFP: raising exceptions %08x\n", exceptions);
if (exceptions == (u32)-1) { if (exceptions == VFP_EXCEPTION_ERROR) {
vfp_panic("unhandled bounce"); vfp_panic("unhandled bounce");
vfp_raise_sigfpe(0, regs); vfp_raise_sigfpe(0, regs);
return; return;
...@@ -170,7 +170,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ ...@@ -170,7 +170,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_
*/ */
static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs)
{ {
u32 exceptions = (u32)-1; u32 exceptions = VFP_EXCEPTION_ERROR;
pr_debug("VFP: emulate: INST=0x%08x SCR=0x%08x\n", inst, fpscr); pr_debug("VFP: emulate: INST=0x%08x SCR=0x%08x\n", inst, fpscr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册