Commit 4e62d458 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky

s390: clean up stacks setup

Replace hard coded stack frame overhead values with STACK_FRAME_OVERHEAD
definition. Avoid unnecessary arithmetic instructions.
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 26f4414a
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/ptrace.h>
#include "sizes.h" #include "sizes.h"
__HEAD __HEAD
...@@ -20,7 +21,6 @@ ENTRY(startup_decompressor) ...@@ -20,7 +21,6 @@ ENTRY(startup_decompressor)
.LPG1: .LPG1:
# setup stack # setup stack
lg %r15,.Lstack-.LPG1(%r13) lg %r15,.Lstack-.LPG1(%r13)
aghi %r15,-160
brasl %r14,decompress_kernel brasl %r14,decompress_kernel
# Set up registers for memory mover. We move the decompressed image to # Set up registers for memory mover. We move the decompressed image to
# 0x100000, where startup_continue of the decompressed image is supposed # 0x100000, where startup_continue of the decompressed image is supposed
...@@ -45,7 +45,7 @@ mover_end: ...@@ -45,7 +45,7 @@ mover_end:
.align 8 .align 8
.Lstack: .Lstack:
.quad 0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)) .quad 0x8000 + THREAD_SIZE - STACK_FRAME_OVERHEAD
.Loffset: .Loffset:
.quad 0x100000 .quad 0x100000
.Lmvsize: .Lmvsize:
......
...@@ -311,7 +311,6 @@ ENTRY(startup_kdump) ...@@ -311,7 +311,6 @@ ENTRY(startup_kdump)
spt 6f-.LPG0(%r13) spt 6f-.LPG0(%r13)
mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13)
l %r15,.Lstack-.LPG0(%r13) l %r15,.Lstack-.LPG0(%r13)
ahi %r15,-STACK_FRAME_OVERHEAD
brasl %r14,verify_facilities brasl %r14,verify_facilities
#ifdef CONFIG_KERNEL_UNCOMPRESSED #ifdef CONFIG_KERNEL_UNCOMPRESSED
jg startup_continue jg startup_continue
...@@ -320,7 +319,7 @@ ENTRY(startup_kdump) ...@@ -320,7 +319,7 @@ ENTRY(startup_kdump)
#endif #endif
.Lstack: .Lstack:
.long 0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)) .long 0x8000 + THREAD_SIZE - STACK_FRAME_OVERHEAD
.align 8 .align 8
6: .long 0x7fffffff,0xffffffff 6: .long 0x7fffffff,0xffffffff
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/ptrace.h>
__HEAD __HEAD
ENTRY(startup_continue) ENTRY(startup_continue)
...@@ -35,10 +36,9 @@ ENTRY(startup_continue) ...@@ -35,10 +36,9 @@ ENTRY(startup_continue)
# #
larl %r14,init_task larl %r14,init_task
stg %r14,__LC_CURRENT stg %r14,__LC_CURRENT
larl %r15,init_thread_union larl %r15,init_thread_union+THREAD_SIZE
aghi %r15,1<<(PAGE_SHIFT+THREAD_SIZE_ORDER) # init_task_union + THREAD_SIZE
stg %r15,__LC_KERNEL_STACK # set end of kernel stack stg %r15,__LC_KERNEL_STACK # set end of kernel stack
aghi %r15,-160 aghi %r15,-STACK_FRAME_OVERHEAD
# #
# Early setup functions that may not rely on an initialized bss section, # Early setup functions that may not rely on an initialized bss section,
# like moving the initrd. Returns with an initialized bss section. # like moving the initrd. Returns with an initialized bss section.
......
...@@ -197,9 +197,7 @@ pgm_check_entry: ...@@ -197,9 +197,7 @@ pgm_check_entry:
brc 2,3b /* busy, try again */ brc 2,3b /* busy, try again */
/* Suspend CPU not available -> panic */ /* Suspend CPU not available -> panic */
larl %r15,init_thread_union larl %r15,init_thread_union+THREAD_SIZE-STACK_FRAME_OVERHEAD
aghi %r15,1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)
aghi %r15,-STACK_FRAME_OVERHEAD
larl %r2,.Lpanic_string larl %r2,.Lpanic_string
brasl %r14,sclp_early_printk_force brasl %r14,sclp_early_printk_force
larl %r3,.Ldisabled_wait_31 larl %r3,.Ldisabled_wait_31
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/sigp.h> #include <asm/sigp.h>
#include <asm/ptrace.h>
/* The purgatory is the code running between two kernels. It's main purpose /* The purgatory is the code running between two kernels. It's main purpose
* is to verify that the next kernel was not corrupted after load and to * is to verify that the next kernel was not corrupted after load and to
...@@ -88,8 +89,7 @@ ENTRY(purgatory_start) ...@@ -88,8 +89,7 @@ ENTRY(purgatory_start)
.base_crash: .base_crash:
/* Setup stack */ /* Setup stack */
larl %r15,purgatory_end larl %r15,purgatory_end-STACK_FRAME_OVERHEAD
aghi %r15,-160
/* If the next kernel is KEXEC_TYPE_CRASH the purgatory is called /* If the next kernel is KEXEC_TYPE_CRASH the purgatory is called
* directly with a flag passed in %r2 whether the purgatory shall do * directly with a flag passed in %r2 whether the purgatory shall do
......
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