浏览代码

MIPS: CPS: Stop dangling delay slot from has_mt.

The has_mt macro ended with a branch, leaving its callers with a delay
slot that would be executed if Config3.MT is not set. However it would
not be executed if Config3 (or earlier Config registers) don't exist
which makes it somewhat inconsistent at best. Fill the delay slot in the
macro & fix the mips_cps_boot_vpes caller appropriately.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: <stable@vger.kernel.org> # 3.16+
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/10865/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Paul Burton 10 年之前
父节点
当前提交
1e5fb282f8
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      arch/mips/kernel/cps-vec.S

+ 2 - 2
arch/mips/kernel/cps-vec.S

@@ -39,6 +39,7 @@
 	 mfc0	\dest, CP0_CONFIG, 3
 	 mfc0	\dest, CP0_CONFIG, 3
 	andi	\dest, \dest, MIPS_CONF3_MT
 	andi	\dest, \dest, MIPS_CONF3_MT
 	beqz	\dest, \nomt
 	beqz	\dest, \nomt
+	 nop
 	.endm
 	.endm
 
 
 .section .text.cps-vec
 .section .text.cps-vec
@@ -226,7 +227,6 @@ LEAF(mips_cps_core_init)
 #ifdef CONFIG_MIPS_MT
 #ifdef CONFIG_MIPS_MT
 	/* Check that the core implements the MT ASE */
 	/* Check that the core implements the MT ASE */
 	has_mt	t0, 3f
 	has_mt	t0, 3f
-	 nop
 
 
 	.set	push
 	.set	push
 	.set	mips64r2
 	.set	mips64r2
@@ -310,8 +310,8 @@ LEAF(mips_cps_boot_vpes)
 	PTR_ADDU t0, t0, t1
 	PTR_ADDU t0, t0, t1
 
 
 	/* Calculate this VPEs ID. If the core doesn't support MT use 0 */
 	/* Calculate this VPEs ID. If the core doesn't support MT use 0 */
+	li	t9, 0
 	has_mt	ta2, 1f
 	has_mt	ta2, 1f
-	 li	t9, 0
 
 
 	/* Find the number of VPEs present in the core */
 	/* Find the number of VPEs present in the core */
 	mfc0	t1, CP0_MVPCONF0
 	mfc0	t1, CP0_MVPCONF0