aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/asm-m68knommu/processor.h28
1 files changed, 20 insertions, 8 deletions
diff --git a/include/asm-m68knommu/processor.h b/include/asm-m68knommu/processor.h
index 278b00bc60c5..0ee158e09abb 100644
--- a/include/asm-m68knommu/processor.h
+++ b/include/asm-m68knommu/processor.h
@@ -78,19 +78,31 @@ struct thread_struct {
78} 78}
79 79
80/* 80/*
81 * Coldfire stacks need to be re-aligned on trap exit, conventional
82 * 68k can handle this case cleanly.
83 */
84#if defined(CONFIG_COLDFIRE)
85#define reformat(_regs) do { (_regs)->format = 0x4; } while(0)
86#else
87#define reformat(_regs) do { } while (0)
88#endif
89
90/*
81 * Do necessary setup to start up a newly executed thread. 91 * Do necessary setup to start up a newly executed thread.
82 * 92 *
83 * pass the data segment into user programs if it exists, 93 * pass the data segment into user programs if it exists,
84 * it can't hurt anything as far as I can tell 94 * it can't hurt anything as far as I can tell
85 */ 95 */
86#define start_thread(_regs, _pc, _usp) \ 96#define start_thread(_regs, _pc, _usp) \
87do { \ 97do { \
88 set_fs(USER_DS); /* reads from user space */ \ 98 set_fs(USER_DS); /* reads from user space */ \
89 (_regs)->pc = (_pc); \ 99 (_regs)->pc = (_pc); \
90 if (current->mm) \ 100 ((struct switch_stack *)(_regs))[-1].a6 = 0; \
91 (_regs)->d5 = current->mm->start_data; \ 101 reformat(_regs); \
92 (_regs)->sr &= ~0x2000; \ 102 if (current->mm) \
93 wrusp(_usp); \ 103 (_regs)->d5 = current->mm->start_data; \
104 (_regs)->sr &= ~0x2000; \
105 wrusp(_usp); \
94} while(0) 106} while(0)
95 107
96/* Forward declaration, a strange C thing */ 108/* Forward declaration, a strange C thing */