ARM: 8078/1: get rid of hardcoded assumptions about kernel stack size
authorAndrey Ryabinin <a.ryabinin@samsung.com>
Wed, 18 Jun 2014 15:12:40 +0000 (16:12 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 1 Jul 2014 14:05:47 +0000 (15:05 +0100)
Changing kernel stack size on arm is not as simple as it should be:
1) THREAD_SIZE macro doesn't respect PAGE_SIZE and THREAD_SIZE_ORDER
2) stack size is hardcoded in get_thread_info macro

This patch fixes it by calculating THREAD_SIZE and thread_info address
taking into account PAGE_SIZE and THREAD_SIZE_ORDER.

Now changing stack size becomes simply changing THREAD_SIZE_ORDER.

Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/assembler.h
arch/arm/include/asm/thread_info.h

index 57f0584e8d97dc7095fa6a785be27f6e71e424e0..906703a5b564dfe138b011d562c1b7510ebfd12a 100644 (file)
@@ -24,6 +24,8 @@
 #include <asm/domain.h>
 #include <asm/opcodes-virt.h>
 #include <asm/asm-offsets.h>
+#include <asm/page.h>
+#include <asm/thread_info.h>
 
 #define IOMEM(x)       (x)
 
  * Get current thread_info.
  */
        .macro  get_thread_info, rd
- ARM(  mov     \rd, sp, lsr #13        )
+ ARM(  mov     \rd, sp, lsr #THREAD_SIZE_ORDER + PAGE_SHIFT    )
  THUMB(        mov     \rd, sp                 )
- THUMB(        lsr     \rd, \rd, #13           )
-       mov     \rd, \rd, lsl #13
+ THUMB(        lsr     \rd, \rd, #THREAD_SIZE_ORDER + PAGE_SHIFT       )
+       mov     \rd, \rd, lsl #THREAD_SIZE_ORDER + PAGE_SHIFT
        .endm
 
 /*
index e4e4208a913037303e24a4c35bcb794b773e21fc..fc44d3761f9e7d36eb8ff4911ff0120a63e7584f 100644 (file)
 
 #include <linux/compiler.h>
 #include <asm/fpstate.h>
+#include <asm/page.h>
 
 #define THREAD_SIZE_ORDER      1
-#define THREAD_SIZE            8192
+#define THREAD_SIZE            (PAGE_SIZE << THREAD_SIZE_ORDER)
 #define THREAD_START_SP                (THREAD_SIZE - 8)
 
 #ifndef __ASSEMBLY__