Hi Geert,
On 30/10/11 23:06, Geert Uytterhoeven wrote:
On Tue, Oct 25, 2011 at 09:19,<[email protected]> wrote:
From: Greg Ungerer<[email protected]>
Virtual memory m68k systems build with register a2 dedicated to being the
current proc pointer. Add code to the ColdFire interrupt and exception
processing to set this on entry, and also at context switch time.
Signed-off-by: Greg Ungerer<[email protected]>
---
arch/m68k/kernel/entry_no.S 24 ++++++++++++++++++------
arch/m68k/platform/coldfire/entry.S | 18 +++++++++++++++++-
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/arch/m68k/kernel/entry_no.S b/arch/m68k/kernel/entry_no.S
index 1b42890..050d7ea 100644
--- a/arch/m68k/kernel/entry_no.S
+++ b/arch/m68k/kernel/entry_no.S
@@ -44,8 +44,12 @@
ENTRY(buserr)
SAVE_ALL_INT
- moveq #-1,%d0
- movel %d0,%sp@(PT_OFF_ORIG_D0)
Don't you need the above anymore, at least on nommu?
Yes it is needed, but it is done in the SAVE_ALL_INT macro now.
That was done in commit 61619b12078dc8b85a3d4cbfa16f650daa341bd1
("m68k: merge mmu and non-mmu include/asm/entry.h files").
It sure has nothing to do with the a2 work that the patch description
says above :) I'll move this change into a separate patch with
appropriate comments.
Regards
Greg
+#ifdef CONFIG_MMU
+ á á á movel á %sp,%d0 á á á á á á á á /* get thread_info pointer
*/
+ á á á andl á á#-THREAD_SIZE,%d0 á á á /* at start of kernel stack */
+ á á á movel á %d0,%a2
+ á á á movel á %a2@,%a2 á á á á á á á á/* current pointer into a2
*/
+#endif
á á á ámovel á %sp,%sp@- á á á á á á á /* stack frame pointer
argument */
á á á ájsr á á buserr_c
á á á áaddql á #4,%sp
@@ -53,8 +57,12 @@ ENTRY(buserr)
áENTRY(trap)
á á á áSAVE_ALL_INT
- á á á moveq á #-1,%d0
- á á á movel á %d0,%sp@(PT_OFF_ORIG_D0)
Same here.
+#ifdef CONFIG_MMU
+ á á á movel á %sp,%d0 á á á á á á á á /* get thread_info pointer
*/
+ á á á andl á á#-THREAD_SIZE,%d0 á á á /* at start of kernel stack */
+ á á á movel á %d0,%a2
+ á á á movel á %a2@,%a2 á á á á á á á á/* current pointer into a2
*/
+#endif
á á á ámovel á %sp,%sp@- á á á á á á á /* stack frame pointer
argument */
á á á ájsr á á trap_c
á á á áaddql á #4,%sp
@@ -65,8 +73,12 @@ ENTRY(trap)
á.globl dbginterrupt
áENTRY(dbginterrupt)
á á á áSAVE_ALL_INT
- á á á moveq á #-1,%d0
- á á á movel á %d0,%sp@(PT_OFF_ORIG_D0)
+#ifdef CONFIG_MMU
+ á á á movel á %sp,%d0 á á á á á á á á /* get thread_info pointer
*/
+ á á á andl á á#-THREAD_SIZE,%d0 á á á /* at start of kernel stack */
+ á á á movel á %d0,%a2
+ á á á movel á %a2@,%a2 á á á á á á á á/* current pointer into a2
*/
+#endif
á á á ámovel á %sp,%sp@- á á á á á á á /* stack frame pointer
argument */
á á á ájsr á á dbginterrupt_c
á á á áaddql á #4,%sp
diff --git a/arch/m68k/platform/coldfire/entry.S
b/arch/m68k/platform/coldfire/entry.S
index f567a16..5fc1f40 100644
--- a/arch/m68k/platform/coldfire/entry.S
+++ b/arch/m68k/platform/coldfire/entry.S
@@ -63,6 +63,13 @@ ENTRY(system_call)
á á á áSAVE_ALL_SYS
á á á ámove á á#0x2000,%sr á á á á á á /* enable intrs again */
+#ifdef CONFIG_MMU
+ á á á movel á %sp,%d2 á á á á á á á á /* get thread_info pointer
*/
+ á á á andl á á#-THREAD_SIZE,%d2 á á á /* at start of kernel stack */
+ á á á movel á %d2,%a2
+ á á á movel á %a2@,%a2 á á á á á á á á/* current pointer into a2
*/
+#endif
+
á á á ácmpl á á#NR_syscalls,%d0
á á á ájcc á á enosys
á á á álea á á sys_call_table,%a0
@@ -166,6 +173,13 @@ Lsignal_return:
áENTRY(inthandler)
á á á áSAVE_ALL_INT
+#ifdef CONFIG_MMU
+ á á á movel á %sp,%d2 á á á á á á á á /* get thread_info pointer
*/
+ á á á andl á á#-THREAD_SIZE,%d2 á á á /* at start of kernel stack */
+ á á á movel á %d2,%a2
+ á á á movel á %a2@,%a2 á á á á á á á á/* current pointer into a2
*/
+#endif
+
á á á ámovew á %sp@(PT_OFF_FORMATVEC),%d0 /* put exception # in d0 */
á á á áandl á á#0x03fc,%d0 á á á á á á /* mask out vector only */
@@ -190,7 +204,9 @@ ENTRY(resume)
á á á ámovel á %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack
pointer */
á á á áRDUSP á á á á á á á á á á á á á á á á á á/* movel
%usp,%a3 */
á á á ámovel á %a3,%a0@(TASK_THREAD+THREAD_USP) /* save thread user stack
*/
-
+#ifdef CONFIG_MMU
+ á á á movel á %a1,%a2 á á á á á á á á á á á á á/* set new
current */
+#endif
á á á ámovel á %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore thread user
stack */
á á á áWRUSP á á á á á á á á á á á á á á á á á á/* movel
%a3,%usp */
á á á ámovel á %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new kernel
stack */
Gr{oetje,eeting}s,
á á á á á á á á á á á á Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
á á á á á á á á á á á á á áá áá -- Linus Torvalds
--
------------------------------------------------------------------------
Greg Ungerer -- Principal Engineer EMAIL: [email protected]
SnapGear Group, McAfee PHONE: +61 7 3435 2888
8 Gardner Close FAX: +61 7 3217 5323
Milton, QLD, 4064, Australia WEB: http://www.SnapGear.com
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html