Browse Source

sh: prefetch early exception data on sh4/sh4a.

Prefetch early exception data. There is unused space in our
exception handler cache line anyway, so this is almost free.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Magnus Damm 16 năm trước cách đây
mục cha
commit
0197f21ca5

+ 5 - 0
arch/sh/include/asm/entry-macros.S

@@ -31,3 +31,8 @@
 #endif	
 #endif	
 	.endm
 	.endm
 
 
+#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
+# define PREF(x)	pref	@x
+#else
+# define PREF(x)	nop
+#endif

+ 5 - 2
arch/sh/kernel/cpu/sh3/entry.S

@@ -463,9 +463,11 @@ tlb_miss:
 	sts	pr, k3		! save original pr value in k3
 	sts	pr, k3		! save original pr value in k3
 
 
 handle_exception:
 handle_exception:
+	mova	exception_data, k0
+
 	! Setup stack and save DSP context (k0 contains original r15 on return)
 	! Setup stack and save DSP context (k0 contains original r15 on return)
 	bsr	prepare_stack_save_dsp
 	bsr	prepare_stack_save_dsp
-	 nop
+	 PREF(k0)
 
 
 	! Save registers / Switch to bank 0
 	! Save registers / Switch to bank 0
 	mov.l	5f, k2		! vector register address
 	mov.l	5f, k2		! vector register address
@@ -556,10 +558,11 @@ ENTRY(handle_interrupt)
 11:
 11:
 #endif /* defined(CONFIG_KGDB) */
 #endif /* defined(CONFIG_KGDB) */
 	sts	pr, k3		! save original pr value in k3
 	sts	pr, k3		! save original pr value in k3
+	mova	exception_data, k0
 
 
 	! Setup stack and save DSP context (k0 contains original r15 on return)
 	! Setup stack and save DSP context (k0 contains original r15 on return)
 	bsr	prepare_stack_save_dsp
 	bsr	prepare_stack_save_dsp
-	 nop
+	 PREF(k0)
 
 
 	! Save registers / Switch to bank 0
 	! Save registers / Switch to bank 0
 	bsr	save_regs	! needs original pr value in k3
 	bsr	save_regs	! needs original pr value in k3