| From stable-bounces@linux.kernel.org Thu Apr 27 05:23:36 2006 |
| Message-Id: <20060427122215.016221000@linux-mips.org> |
| Date: Thu, 27 Apr 2006 00:00:04 +0100 |
| From: Ralf Baechle <ralf@linux-mips.org> |
| To: stable@kernel.org |
| Content-Disposition: inline; filename=0004.patch |
| Cc: Win Treese <treese@acm.org> |
| Subject: MIPS: Fix branch emulation for floating-point exceptions. |
| |
| From: Win Treese <treese@acm.org> |
| |
| In the branch emulation for floating-point exceptions, __compute_return_epc |
| must determine for bc1f et al which condition code bit to test. This is |
| based on bits <4:2> of the rt field. The switch statement to distinguish |
| bc1f et al needs to use only the two low bits of rt, but the old code tests |
| on the whole rt field. This patch masks off the proper bits. |
| |
| Signed-off-by: Win Treese <treese@acm.org> |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/mips/kernel/branch.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- linux-2.6.16.11.orig/arch/mips/kernel/branch.c |
| +++ linux-2.6.16.11/arch/mips/kernel/branch.c |
| @@ -184,7 +184,7 @@ int __compute_return_epc(struct pt_regs |
| bit = (insn.i_format.rt >> 2); |
| bit += (bit != 0); |
| bit += 23; |
| - switch (insn.i_format.rt) { |
| + switch (insn.i_format.rt & 3) { |
| case 0: /* bc1f */ |
| case 2: /* bc1fl */ |
| if (~fcr31 & (1 << bit)) |