[MIPS] Check FCSR for pending interrupts before restoring from a context.
Signed-off-by: Chris Dearman <chris@mips.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
b86b30f81c
commit
6d6671066a
@@ -114,6 +114,14 @@ LEAF(_save_fp_context32)
|
|||||||
*/
|
*/
|
||||||
LEAF(_restore_fp_context)
|
LEAF(_restore_fp_context)
|
||||||
EX lw t0, SC_FPC_CSR(a0)
|
EX lw t0, SC_FPC_CSR(a0)
|
||||||
|
|
||||||
|
/* Fail if the CSR has exceptions pending */
|
||||||
|
srl t1, t0, 5
|
||||||
|
and t1, t0
|
||||||
|
andi t1, 0x1f << 7
|
||||||
|
bnez t1, fault
|
||||||
|
nop
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
EX ldc1 $f1, SC_FPREGS+8(a0)
|
EX ldc1 $f1, SC_FPREGS+8(a0)
|
||||||
EX ldc1 $f3, SC_FPREGS+24(a0)
|
EX ldc1 $f3, SC_FPREGS+24(a0)
|
||||||
@@ -157,6 +165,14 @@ LEAF(_restore_fp_context)
|
|||||||
LEAF(_restore_fp_context32)
|
LEAF(_restore_fp_context32)
|
||||||
/* Restore an o32 sigcontext. */
|
/* Restore an o32 sigcontext. */
|
||||||
EX lw t0, SC32_FPC_CSR(a0)
|
EX lw t0, SC32_FPC_CSR(a0)
|
||||||
|
|
||||||
|
/* Fail if the CSR has exceptions pending */
|
||||||
|
srl t1, t0, 5
|
||||||
|
and t1, t0
|
||||||
|
andi t1, 0x1f << 7
|
||||||
|
bnez t1, fault
|
||||||
|
nop
|
||||||
|
|
||||||
EX ldc1 $f0, SC32_FPREGS+0(a0)
|
EX ldc1 $f0, SC32_FPREGS+0(a0)
|
||||||
EX ldc1 $f2, SC32_FPREGS+16(a0)
|
EX ldc1 $f2, SC32_FPREGS+16(a0)
|
||||||
EX ldc1 $f4, SC32_FPREGS+32(a0)
|
EX ldc1 $f4, SC32_FPREGS+32(a0)
|
||||||
|
Reference in New Issue
Block a user