[PATCH V5 10/11] riscv: Add config of thread stack size

From: guoren
Date: Sun Sep 18 2022 - 11:54:56 EST


From: Guo Ren <guoren@xxxxxxxxxxxxxxxxx>

0cac21b02ba5 ("risc v: use 16KB kernel stack on 64-bit") increase the
thread size mandatory, but some scenarios, such as D1 with a small
memory footprint, would suffer from that. After independent irq stack
support, let's give users a choice to determine their custom stack size.

Signed-off-by: Guo Ren <guoren@xxxxxxxxxxxxxxxxx>
Signed-off-by: Guo Ren <guoren@xxxxxxxxxx>
Cc: Andreas Schwab <schwab@xxxxxxx>
---
arch/riscv/Kconfig | 18 ++++++++++++++++++
arch/riscv/include/asm/thread_info.h | 12 +-----------
2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index dfe600f3526c..8241b12399d7 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -442,6 +442,24 @@ config IRQ_STACKS
Add independent irq & softirq stacks for percpu to prevent kernel stack
overflows. We may save some memory footprint by disabling IRQ_STACKS.

+config THREAD_SIZE
+ int "Kernel stack size (in bytes)" if EXPERT
+ range 4096 65536
+ default 8192 if 32BIT && !KASAN
+ default 32768 if 64BIT && KASAN
+ default 16384
+ help
+ Specify the Pages of thread stack size (from 4KB to 64KB), which also
+ affects irq stack size, which is equal to thread stack size.
+
+config THREAD_SIZE_ORDER
+ int
+ default 0 if THREAD_SIZE = 4096
+ default 1 if THREAD_SIZE <= 8192
+ default 2 if THREAD_SIZE <= 16384
+ default 3 if THREAD_SIZE <= 32768
+ default 4
+
endmenu # "Platform type"

menu "Kernel features"
diff --git a/arch/riscv/include/asm/thread_info.h b/arch/riscv/include/asm/thread_info.h
index 043da8ccc7e6..c970d41dc4c6 100644
--- a/arch/riscv/include/asm/thread_info.h
+++ b/arch/riscv/include/asm/thread_info.h
@@ -11,18 +11,8 @@
#include <asm/page.h>
#include <linux/const.h>

-#ifdef CONFIG_KASAN
-#define KASAN_STACK_ORDER 1
-#else
-#define KASAN_STACK_ORDER 0
-#endif
-
/* thread information allocation */
-#ifdef CONFIG_64BIT
-#define THREAD_SIZE_ORDER (2 + KASAN_STACK_ORDER)
-#else
-#define THREAD_SIZE_ORDER (1 + KASAN_STACK_ORDER)
-#endif
+#define THREAD_SIZE_ORDER CONFIG_THREAD_SIZE_ORDER
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)

/*
--
2.36.1