Re: [PATCH 09/36] m68k: set register a2 to current if MMU enabled on ColdFire

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Geert,

On 30/10/11 23:06, Geert Uytterhoeven wrote:
On Tue, Oct 25, 2011 at 09:19,<gerg@xxxxxxxxxxxx>  wrote:
From: Greg Ungerer<gerg@xxxxxxxxxxx>

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<gerg@xxxxxxxxxxx>
---
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 -- geert@xxxxxxxxxxxxxx

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:     gerg@xxxxxxxxxxxx
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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux