Commit d25ba98a authored by Greg Ungerer's avatar Greg Ungerer

m68k: remove thread_info struct from thread struct

Currently on m68k we have a comeplete thread_info structure stored inside
of the thread_struct, and we also have it in the initial part of the kernel
stack. Mostly the code currently uses the one inside of the thread_struct,
only using the "task" pointer from the stack based one.

This is wasteful and confusing, we should only have the single instance of
thread_info inside the stack page. And this is the norm for all other
architectures.

This change makes m68k handle thread_info consistently on both MMU enabled
and non-MMU setups.
Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
parent 8d362b0d
...@@ -88,14 +88,12 @@ struct thread_struct { ...@@ -88,14 +88,12 @@ struct thread_struct {
unsigned long fp[8*3]; unsigned long fp[8*3];
unsigned long fpcntl[3]; /* fp control regs */ unsigned long fpcntl[3]; /* fp control regs */
unsigned char fpstate[FPSTATESIZE]; /* floating point state */ unsigned char fpstate[FPSTATESIZE]; /* floating point state */
struct thread_info info;
}; };
#define INIT_THREAD { \ #define INIT_THREAD { \
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \ .ksp = sizeof(init_stack) + (unsigned long) init_stack, \
.sr = PS_S, \ .sr = PS_S, \
.fs = __KERNEL_DS, \ .fs = __KERNEL_DS, \
.info = INIT_THREAD_INFO(init_task), \
} }
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
......
...@@ -47,34 +47,6 @@ struct thread_info { ...@@ -47,34 +47,6 @@ struct thread_info {
#define init_stack (init_thread_union.stack) #define init_stack (init_thread_union.stack)
#ifdef CONFIG_MMU
#ifndef __ASSEMBLY__
#include <asm/current.h>
#endif
#ifdef ASM_OFFSETS_C
#define task_thread_info(tsk) ((struct thread_info *) NULL)
#else
#include <asm/asm-offsets.h>
#define task_thread_info(tsk) ((struct thread_info *)((char *)tsk+TASK_INFO))
#endif
#define init_thread_info (init_task.thread.info)
#define task_stack_page(tsk) ((tsk)->stack)
#define current_thread_info() task_thread_info(current)
#define __HAVE_THREAD_FUNCTIONS
#define setup_thread_stack(p, org) ({ \
*(struct task_struct **)(p)->stack = (p); \
task_thread_info(p)->task = (p); \
})
#define end_of_stack(p) ((unsigned long *)(p)->stack + 1)
#else /* !CONFIG_MMU */
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* how to get the thread information struct from C */ /* how to get the thread information struct from C */
static inline struct thread_info *current_thread_info(void) static inline struct thread_info *current_thread_info(void)
...@@ -92,8 +64,6 @@ static inline struct thread_info *current_thread_info(void) ...@@ -92,8 +64,6 @@ static inline struct thread_info *current_thread_info(void)
#define init_thread_info (init_thread_union.thread_info) #define init_thread_info (init_thread_union.thread_info)
#endif /* CONFIG_MMU */
/* entry.S relies on these definitions! /* entry.S relies on these definitions!
* bits 0-7 are tested at every exception exit * bits 0-7 are tested at every exception exit
* bits 8-15 are also tested at syscall exit * bits 8-15 are also tested at syscall exit
......
...@@ -24,7 +24,7 @@ int main(void) ...@@ -24,7 +24,7 @@ int main(void)
/* offsets into the task struct */ /* offsets into the task struct */
DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
DEFINE(TASK_MM, offsetof(struct task_struct, mm)); DEFINE(TASK_MM, offsetof(struct task_struct, mm));
DEFINE(TASK_INFO, offsetof(struct task_struct, thread.info)); DEFINE(TASK_STACK, offsetof(struct task_struct, stack));
/* offsets into the thread struct */ /* offsets into the thread struct */
DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp)); DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp));
......
...@@ -99,7 +99,8 @@ do_trace_exit: ...@@ -99,7 +99,8 @@ do_trace_exit:
jra .Lret_from_exception jra .Lret_from_exception
ENTRY(ret_from_signal) ENTRY(ret_from_signal)
tstb %curptr@(TASK_INFO+TINFO_FLAGS+2) movel %curptr@(TASK_STACK),%a1
tstb %a1@(TINFO_FLAGS+2)
jge 1f jge 1f
jbsr syscall_trace jbsr syscall_trace
1: RESTORE_SWITCH_STACK 1: RESTORE_SWITCH_STACK
...@@ -120,11 +121,13 @@ ENTRY(system_call) ...@@ -120,11 +121,13 @@ ENTRY(system_call)
SAVE_ALL_SYS SAVE_ALL_SYS
GET_CURRENT(%d1) GET_CURRENT(%d1)
movel %d1,%a1
| save top of frame | save top of frame
movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0) movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0)
| syscall trace? | syscall trace?
tstb %curptr@(TASK_INFO+TINFO_FLAGS+2) tstb %a1@(TINFO_FLAGS+2)
jmi do_trace_entry jmi do_trace_entry
cmpl #NR_syscalls,%d0 cmpl #NR_syscalls,%d0
jcc badsys jcc badsys
...@@ -133,7 +136,8 @@ syscall: ...@@ -133,7 +136,8 @@ syscall:
movel %d0,%sp@(PT_OFF_D0) | save the return value movel %d0,%sp@(PT_OFF_D0) | save the return value
ret_from_syscall: ret_from_syscall:
|oriw #0x0700,%sr |oriw #0x0700,%sr
movew %curptr@(TASK_INFO+TINFO_FLAGS+2),%d0 movel %curptr@(TASK_STACK),%a1
movew %a1@(TINFO_FLAGS+2),%d0
jne syscall_exit_work jne syscall_exit_work
1: RESTORE_ALL 1: RESTORE_ALL
...@@ -159,7 +163,8 @@ ENTRY(ret_from_exception) ...@@ -159,7 +163,8 @@ ENTRY(ret_from_exception)
andw #ALLOWINT,%sr andw #ALLOWINT,%sr
resume_userspace: resume_userspace:
moveb %curptr@(TASK_INFO+TINFO_FLAGS+3),%d0 movel %curptr@(TASK_STACK),%a1
moveb %a1@(TINFO_FLAGS+3),%d0
jne exit_work jne exit_work
1: RESTORE_ALL 1: RESTORE_ALL
...@@ -199,7 +204,8 @@ do_delayed_trace: ...@@ -199,7 +204,8 @@ do_delayed_trace:
ENTRY(auto_inthandler) ENTRY(auto_inthandler)
SAVE_ALL_INT SAVE_ALL_INT
GET_CURRENT(%d0) GET_CURRENT(%d0)
addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %d0,%a1
addqb #1,%a1@(TINFO_PREEMPT+1)
| put exception # in d0 | put exception # in d0
bfextu %sp@(PT_OFF_FORMATVEC){#4,#10},%d0 bfextu %sp@(PT_OFF_FORMATVEC){#4,#10},%d0
subw #VEC_SPUR,%d0 subw #VEC_SPUR,%d0
...@@ -211,7 +217,8 @@ auto_irqhandler_fixup = . + 2 ...@@ -211,7 +217,8 @@ auto_irqhandler_fixup = . + 2
addql #8,%sp | pop parameters off stack addql #8,%sp | pop parameters off stack
ret_from_interrupt: ret_from_interrupt:
subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %curptr@(TASK_STACK),%a1
subqb #1,%a1@(TINFO_PREEMPT+1)
jeq ret_from_last_interrupt jeq ret_from_last_interrupt
2: RESTORE_ALL 2: RESTORE_ALL
...@@ -232,7 +239,8 @@ ret_from_last_interrupt: ...@@ -232,7 +239,8 @@ ret_from_last_interrupt:
ENTRY(user_inthandler) ENTRY(user_inthandler)
SAVE_ALL_INT SAVE_ALL_INT
GET_CURRENT(%d0) GET_CURRENT(%d0)
addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %d0,%a1
addqb #1,%a1@(TINFO_PREEMPT+1)
| put exception # in d0 | put exception # in d0
bfextu %sp@(PT_OFF_FORMATVEC){#4,#10},%d0 bfextu %sp@(PT_OFF_FORMATVEC){#4,#10},%d0
user_irqvec_fixup = . + 2 user_irqvec_fixup = . + 2
...@@ -243,7 +251,8 @@ user_irqvec_fixup = . + 2 ...@@ -243,7 +251,8 @@ user_irqvec_fixup = . + 2
jsr do_IRQ | process the IRQ jsr do_IRQ | process the IRQ
addql #8,%sp | pop parameters off stack addql #8,%sp | pop parameters off stack
subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %curptr@(TASK_STACK),%a1
subqb #1,%a1@(TINFO_PREEMPT+1)
jeq ret_from_last_interrupt jeq ret_from_last_interrupt
RESTORE_ALL RESTORE_ALL
...@@ -252,13 +261,15 @@ user_irqvec_fixup = . + 2 ...@@ -252,13 +261,15 @@ user_irqvec_fixup = . + 2
ENTRY(bad_inthandler) ENTRY(bad_inthandler)
SAVE_ALL_INT SAVE_ALL_INT
GET_CURRENT(%d0) GET_CURRENT(%d0)
addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %d0,%a1
addqb #1,%a1@(TINFO_PREEMPT+1)
movel %sp,%sp@- movel %sp,%sp@-
jsr handle_badint jsr handle_badint
addql #4,%sp addql #4,%sp
subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) movel %curptr@(TASK_STACK),%a1
subqb #1,%a1@(TINFO_PREEMPT+1)
jeq ret_from_last_interrupt jeq ret_from_last_interrupt
RESTORE_ALL RESTORE_ALL
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment