Browse Source

[MIPS] Ensure that ST0_FR is never set on a 32 bit kernel

Signed-off-by: Chris Dearman <chris@mips.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Chris Dearman 17 years ago
parent
commit
bbaf238b5f
2 changed files with 4 additions and 5 deletions
  1. 1 2
      arch/mips/kernel/process.c
  2. 3 3
      arch/mips/kernel/traps.c

+ 1 - 2
arch/mips/kernel/process.c

@@ -77,9 +77,8 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp)
 	unsigned long status;
 	unsigned long status;
 
 
 	/* New thread loses kernel privileges. */
 	/* New thread loses kernel privileges. */
-	status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|KU_MASK);
+	status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|ST0_FR|KU_MASK);
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
-	status &= ~ST0_FR;
 	status |= test_thread_flag(TIF_32BIT_REGS) ? 0 : ST0_FR;
 	status |= test_thread_flag(TIF_32BIT_REGS) ? 0 : ST0_FR;
 #endif
 #endif
 	status |= KU_USER;
 	status |= KU_USER;

+ 3 - 3
arch/mips/kernel/traps.c

@@ -1317,12 +1317,12 @@ void __init per_cpu_trap_init(void)
 #endif
 #endif
 	if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
 	if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
 		status_set |= ST0_XX;
 		status_set |= ST0_XX;
+	if (cpu_has_dsp)
+		status_set |= ST0_MX;
+
 	change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
 	change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
 			 status_set);
 			 status_set);
 
 
-	if (cpu_has_dsp)
-		set_c0_status(ST0_MX);
-
 #ifdef CONFIG_CPU_MIPSR2
 #ifdef CONFIG_CPU_MIPSR2
 	if (cpu_has_mips_r2) {
 	if (cpu_has_mips_r2) {
 		unsigned int enable = 0x0000000f;
 		unsigned int enable = 0x0000000f;