Commit bbc6f1ba authored by Greg Ungerer's avatar Greg Ungerer
Browse files

m68k: set register a2 to current if MMU enabled on ColdFire



Virtual memory m68k systems build with register a2 dedicated to being the
current proc pointer (non-MMU don't do this). Add code to the ColdFire
interrupt and exception processing to set this on entry, and at context
switch time. We use the same GET_CURRENT() macro that MMU enabled code
uses - modifying it so that the assembler is ColdFire clean.

Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
Acked-by: default avatarMatt Waddel <mwaddel@yahoo.com>
Acked-by: default avatarKurt Mahan <kmahan@xmission.com>
Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent 88be3515
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -222,16 +222,24 @@
 * Non-MMU systems do not reserve %a2 in this way, and this definition is
 * not used for them.
 */
#ifdef CONFIG_MMU

#define curptr a2

#define GET_CURRENT(tmp) get_current tmp
.macro get_current reg=%d0
	movel	%sp,\reg
	andw	#-THREAD_SIZE,\reg
	andl	#-THREAD_SIZE,\reg
	movel	\reg,%curptr
	movel	%curptr@,%curptr
.endm

#else

#define GET_CURRENT(tmp)

#endif /* CONFIG_MMU */

#else /* C source */

#define STR(X) STR1(X)
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@

ENTRY(buserr)
	SAVE_ALL_INT
	GET_CURRENT(%d0)
	movel	%sp,%sp@- 		/* stack frame pointer argument */
	jsr	buserr_c
	addql	#4,%sp
@@ -51,6 +52,7 @@ ENTRY(buserr)

ENTRY(trap)
	SAVE_ALL_INT
	GET_CURRENT(%d0)
	movel	%sp,%sp@- 		/* stack frame pointer argument */
	jsr	trap_c
	addql	#4,%sp
@@ -61,6 +63,7 @@ ENTRY(trap)
.globl dbginterrupt
ENTRY(dbginterrupt)
	SAVE_ALL_INT
	GET_CURRENT(%d0)
	movel	%sp,%sp@- 		/* stack frame pointer argument */
	jsr	dbginterrupt_c
	addql	#4,%sp
+5 −1
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ enosys:
ENTRY(system_call)
	SAVE_ALL_SYS
	move	#0x2000,%sr		/* enable intrs again */
	GET_CURRENT(%d2)

	cmpl	#NR_syscalls,%d0
	jcc	enosys
@@ -165,6 +166,7 @@ Lsignal_return:
 */
ENTRY(inthandler)
	SAVE_ALL_INT
	GET_CURRENT(%d2)

	movew	%sp@(PT_OFF_FORMATVEC),%d0 /* put exception # in d0 */
	andl	#0x03fc,%d0		/* mask out vector only */
@@ -190,7 +192,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 */