mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
Construct init thread stack in the linker script rather than by union
Construct the init thread stack in the linker script rather than doing it by means of a union so that ia64's init_task.c can be got rid of. The following symbols are then made available from INIT_TASK_DATA() linker script macro: init_thread_union init_stack INIT_TASK_DATA() also expands the region to THREAD_SIZE to accommodate the size of the init stack. init_thread_union is given its own section so that it can be placed into the stack space in the right order. I'm assuming that the ia64 ordering is correct and that the task_struct is first and the thread_info second. Signed-off-by: David Howells <dhowells@redhat.com> Tested-by: Tony Luck <tony.luck@intel.com> Tested-by: Will Deacon <will.deacon@arm.com> (arm64) Tested-by: Palmer Dabbelt <palmer@sifive.com> Acked-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
1381019320
commit
0500871f21
50 changed files with 42 additions and 155 deletions
|
@ -1446,12 +1446,21 @@ extern void ia64_set_curr_task(int cpu, struct task_struct *p);
|
|||
void yield(void);
|
||||
|
||||
union thread_union {
|
||||
#ifndef CONFIG_ARCH_TASK_STRUCT_ON_STACK
|
||||
struct task_struct task;
|
||||
#endif
|
||||
#ifndef CONFIG_THREAD_INFO_IN_TASK
|
||||
struct thread_info thread_info;
|
||||
#endif
|
||||
unsigned long stack[THREAD_SIZE/sizeof(long)];
|
||||
};
|
||||
|
||||
#ifndef CONFIG_THREAD_INFO_IN_TASK
|
||||
extern struct thread_info init_thread_info;
|
||||
#endif
|
||||
|
||||
extern unsigned long init_stack[THREAD_SIZE / sizeof(unsigned long)];
|
||||
|
||||
#ifdef CONFIG_THREAD_INFO_IN_TASK
|
||||
static inline struct thread_info *task_thread_info(struct task_struct *task)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue