s390: clean up stacks setup
authorVasily Gorbik <gor@linux.ibm.com>
Fri, 14 Sep 2018 15:35:46 +0000 (17:35 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 20 Sep 2018 11:20:29 +0000 (13:20 +0200)
Replace hard coded stack frame overhead values with STACK_FRAME_OVERHEAD
definition. Avoid unnecessary arithmetic instructions.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/boot/compressed/head.S
arch/s390/boot/head.S
arch/s390/kernel/head64.S
arch/s390/kernel/swsusp.S
arch/s390/purgatory/head.S

index df8dbbc..4041fcf 100644 (file)
@@ -12,6 +12,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/thread_info.h>
 #include <asm/page.h>
+#include <asm/ptrace.h>
 #include "sizes.h"
 
 __HEAD
@@ -20,7 +21,6 @@ ENTRY(startup_decompressor)
 .LPG1:
        # setup stack
        lg      %r15,.Lstack-.LPG1(%r13)
-       aghi    %r15,-160
        brasl   %r14,decompress_kernel
        # Set up registers for memory mover. We move the decompressed image to
        # 0x100000, where startup_continue of the decompressed image is supposed
@@ -45,7 +45,7 @@ mover_end:
 
        .align  8
 .Lstack:
-       .quad   0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER))
+       .quad   0x8000 + THREAD_SIZE - STACK_FRAME_OVERHEAD
 .Loffset:
        .quad   0x100000
 .Lmvsize:
index f1cdca8..d0736a0 100644 (file)
@@ -311,7 +311,6 @@ ENTRY(startup_kdump)
        spt     6f-.LPG0(%r13)
        mvc     __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13)
        l       %r15,.Lstack-.LPG0(%r13)
-       ahi     %r15,-STACK_FRAME_OVERHEAD
        brasl   %r14,verify_facilities
 #ifdef CONFIG_KERNEL_UNCOMPRESSED
        jg      startup_continue
@@ -320,7 +319,7 @@ ENTRY(startup_kdump)
 #endif
 
 .Lstack:
-       .long   0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER))
+       .long   0x8000 + THREAD_SIZE - STACK_FRAME_OVERHEAD
        .align  8
 6:     .long   0x7fffffff,0xffffffff
 
index 6d14ad4..b31dfb1 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/thread_info.h>
 #include <asm/page.h>
+#include <asm/ptrace.h>
 
 __HEAD
 ENTRY(startup_continue)
@@ -35,10 +36,9 @@ ENTRY(startup_continue)
 #
        larl    %r14,init_task
        stg     %r14,__LC_CURRENT
-       larl    %r15,init_thread_union
-       aghi    %r15,1<<(PAGE_SHIFT+THREAD_SIZE_ORDER) # init_task_union + THREAD_SIZE
+       larl    %r15,init_thread_union+THREAD_SIZE
        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,
 # like moving the initrd. Returns with an initialized bss section.
index c1a080b..34b014b 100644 (file)
@@ -197,9 +197,7 @@ pgm_check_entry:
        brc     2,3b                            /* busy, try again */
 
        /* Suspend CPU not available -> panic */
-       larl    %r15,init_thread_union
-       aghi    %r15,1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)
-       aghi    %r15,-STACK_FRAME_OVERHEAD
+       larl    %r15,init_thread_union+THREAD_SIZE-STACK_FRAME_OVERHEAD
        larl    %r2,.Lpanic_string
        brasl   %r14,sclp_early_printk_force
        larl    %r3,.Ldisabled_wait_31
index 2e3707b..5a10ce3 100644 (file)
@@ -11,6 +11,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/page.h>
 #include <asm/sigp.h>
+#include <asm/ptrace.h>
 
 /* 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
@@ -88,8 +89,7 @@ ENTRY(purgatory_start)
 .base_crash:
 
        /* Setup stack */
-       larl    %r15,purgatory_end
-       aghi    %r15,-160
+       larl    %r15,purgatory_end-STACK_FRAME_OVERHEAD
 
        /* If the next kernel is KEXEC_TYPE_CRASH the purgatory is called
         * directly with a flag passed in %r2 whether the purgatory shall do