diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2010-02-01 18:50:40 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-02-01 20:05:09 +0000 |
commit | dbead405801c8d5aa1bc21ab6e2a47f060d47c06 (patch) | |
tree | eac1f57dd0baa9e2b262bae0c0d310ea66cae461 /arch/arm/vfp/vfpmodule.c | |
parent | c540b9ff0f8679ba924fac072aeb7d63fa473190 (diff) | |
download | op-kernel-dev-dbead405801c8d5aa1bc21ab6e2a47f060d47c06.zip op-kernel-dev-dbead405801c8d5aa1bc21ab6e2a47f060d47c06.tar.gz |
ARM: 5909/1: ARM: Correct the FPSCR bits setting when raising exceptions
Commit c98929c07a removed the clearing of the FPSCR[31:28] bits from the
vfp_raise_exceptions() function and the new bits are or'ed with the old
FPSCR bits leading to unexpected results (the original commit was
referring to the cumulative bits - FPSCR[4:0]).
Reported-by: Tom Hameenanttila <tmhameen@marvell.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/vfp/vfpmodule.c')
-rw-r--r-- | arch/arm/vfp/vfpmodule.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index f60a540..a63c4be 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -197,10 +197,13 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ } /* - * Update the FPSCR with the additional exception flags. + * If any of the status flags are set, update the FPSCR. * Comparison instructions always return at least one of * these flags set. */ + if (exceptions & (FPSCR_N|FPSCR_Z|FPSCR_C|FPSCR_V)) + fpscr &= ~(FPSCR_N|FPSCR_Z|FPSCR_C|FPSCR_V); + fpscr |= exceptions; fmxr(FPSCR, fpscr); |