diff options
Diffstat (limited to 'arch/s390/kernel/setup.c')
| -rw-r--r-- | arch/s390/kernel/setup.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 29268859d8e..0f419c5765c 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -377,11 +377,14 @@ static void __init setup_lowcore(void)  		PSW_MASK_DAT | PSW_MASK_MCHECK;  	lc->io_new_psw.addr = PSW_ADDR_AMODE | (unsigned long) io_int_handler;  	lc->clock_comparator = -1ULL; -	lc->kernel_stack = ((unsigned long) &init_thread_union) + THREAD_SIZE; +	lc->kernel_stack = ((unsigned long) &init_thread_union) +		+ THREAD_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);  	lc->async_stack = (unsigned long) -		__alloc_bootmem(ASYNC_SIZE, ASYNC_SIZE, 0) + ASYNC_SIZE; +		__alloc_bootmem(ASYNC_SIZE, ASYNC_SIZE, 0) +		+ ASYNC_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);  	lc->panic_stack = (unsigned long) -		__alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0) + PAGE_SIZE; +		__alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0) +		+ PAGE_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);  	lc->current_task = (unsigned long) init_thread_union.thread_info.task;  	lc->thread_info = (unsigned long) &init_thread_union;  	lc->machine_flags = S390_lowcore.machine_flags;  |