diff options
author | Greg Ungerer <gerg@uclinux.org> | 2011-05-05 22:32:12 +1000 |
---|---|---|
committer | Greg Ungerer <gerg@uclinux.org> | 2011-07-25 11:20:40 +1000 |
commit | f941f5caa0e947f4ed060a751ca4a3bf552af625 (patch) | |
tree | f6811757e568e74307abd39534b1d7e7813c8d0f /arch/m68k/platform/68328/entry.S | |
parent | 10f939ff3ab80514da3bd96357bb54a8a59b9225 (diff) | |
download | lwn-f941f5caa0e947f4ed060a751ca4a3bf552af625.tar.gz lwn-f941f5caa0e947f4ed060a751ca4a3bf552af625.zip |
m68k: merge MMU and non MMU versions of system.h
The non-MMU m68k targets can use the same asm/system.h as the MMU
targets. So switch the current system_mm.h to be system.h and remove
system_no.h.
The assembly support code for the non-MMU resume functions needs to
be modified to match the now common switch_to() macro. Specifically
this means correctly saving and restoring the status flags in the case
of the ColdFire resume, and some reordering of the code to not use
registers before they are saved or after they are restored.
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Diffstat (limited to 'arch/m68k/platform/68328/entry.S')
-rw-r--r-- | arch/m68k/platform/68328/entry.S | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/m68k/platform/68328/entry.S b/arch/m68k/platform/68328/entry.S index f68dce766c0a..4ed7a65d5aa0 100644 --- a/arch/m68k/platform/68328/entry.S +++ b/arch/m68k/platform/68328/entry.S @@ -241,22 +241,21 @@ ENTRY(bad_interrupt) /* * Beware - when entering resume, prev (the current task) is - * in a0, next (the new task) is in a1,so don't change these + * in a0, next (the new task) is in a1, so don't change these * registers until their contents are no longer needed. */ ENTRY(resume) movel %a0,%d1 /* save prev thread in d1 */ movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */ - movel %usp,%a2 /* save usp */ - movel %a2,%a0@(TASK_THREAD+THREAD_USP) - SAVE_SWITCH_STACK movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */ + movel %usp,%a3 /* save usp */ + movel %a3,%a0@(TASK_THREAD+THREAD_USP) + + movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore user stack */ + movel %a3,%usp movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ RESTORE_SWITCH_STACK - - movel %a1@(TASK_THREAD+THREAD_USP),%a0 /* restore user stack */ - movel %a0,%usp movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */ rts |