forked from luck/tmp_suning_uos_patched
init: add arch_call_rest_init to allow stack switching
With CONFIG_VMAP_STACK=y the kernel stack of all tasks should be allocated in the vmalloc space. The initial stack used for all the early init code is in the init_thread_union. To be able to switch from this early stack to a properly allocated stack from vmalloc the architecture needs a switch-over point. Introduce the arch_call_rest_init() function with a weak definition in init/main.c with the only purpose to call rest_init() from the end of start_kernel(). The architecture override can then do the necessary magic to switch to the new vmalloc'ed stack. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
00e9e6645a
commit
53c99bd665
|
@ -9,5 +9,7 @@
|
|||
up something else. */
|
||||
|
||||
extern asmlinkage void __init start_kernel(void);
|
||||
extern void __init arch_call_rest_init(void);
|
||||
extern void __ref rest_init(void);
|
||||
|
||||
#endif /* _LINUX_START_KERNEL_H */
|
||||
|
|
|
@ -394,7 +394,7 @@ static void __init setup_command_line(char *command_line)
|
|||
|
||||
static __initdata DECLARE_COMPLETION(kthreadd_done);
|
||||
|
||||
static noinline void __ref rest_init(void)
|
||||
noinline void __ref rest_init(void)
|
||||
{
|
||||
struct task_struct *tsk;
|
||||
int pid;
|
||||
|
@ -528,6 +528,11 @@ static void __init mm_init(void)
|
|||
pti_init();
|
||||
}
|
||||
|
||||
void __init __weak arch_call_rest_init(void)
|
||||
{
|
||||
rest_init();
|
||||
}
|
||||
|
||||
asmlinkage __visible void __init start_kernel(void)
|
||||
{
|
||||
char *command_line;
|
||||
|
@ -736,7 +741,7 @@ asmlinkage __visible void __init start_kernel(void)
|
|||
}
|
||||
|
||||
/* Do the rest non-__init'ed, we're now alive */
|
||||
rest_init();
|
||||
arch_call_rest_init();
|
||||
}
|
||||
|
||||
/* Call all constructor functions linked into the kernel. */
|
||||
|
|
Loading…
Reference in New Issue
Block a user