From: Yogesh Lal ylal@codeaurora.org
mainline inclusion from mainline-v5.12-rc1 commit d262093656a0eec6d6114a3178a9d887fddd0ded category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I9GSSR
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i...
--------------------------------
Use CONFIG_STACK_HASH_ORDER to configure STACK_HASH_SIZE.
Aim is to have configurable value for STACK_HASH_SIZE, so depend on use case one can configure it.
One example is of Page Owner, CONFIG_PAGE_OWNER works only if page_owner=on via kernel parameter on CONFIG_PAGE_OWNER configured system. Thus, unless admin enable it via command line option, the stackdepot will just waste 8M memory without any customer.
Making it configurable and use lower value helps to enable features like CONFIG_PAGE_OWNER without any significant overhead.
Link: https://lkml.kernel.org/r/1611749198-24316-1-git-send-email-vjitta@codeauror... Signed-off-by: Yogesh Lal ylal@codeaurora.org Signed-off-by: Vinayak Menon vinmenon@codeaurora.org Signed-off-by: Vijayanand Jitta vjitta@codeaurora.org Reviewed-by: Minchan Kim minchan@kernel.org Reviewed-by: Alexander Potapenko glider@google.com Signed-off-by: Andrew Morton akpm@linux-foundation.org Signed-off-by: Linus Torvalds torvalds@linux-foundation.org
Conflicts: lib/Kconfig [context conflicts] Signed-off-by: Jinjiang Tu tujinjiang@huawei.com --- lib/Kconfig | 9 +++++++++ lib/stackdepot.c | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/Kconfig b/lib/Kconfig index 497304f1647c..06a796a94828 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -664,6 +664,15 @@ config STACKDEPOT bool select STACKTRACE
+config STACK_HASH_ORDER + int "stack depot hash size (12 => 4KB, 20 => 1024KB)" + range 12 20 + default 20 + depends on STACKDEPOT + help + Select the hash size as a power of 2 for the stackdepot hash table. + Choose a lower value to reduce the memory impact. + config STACKDEPOT_ALWAYS_INIT bool select STACKDEPOT diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 8aed500d5ee8..e3275f07076c 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c @@ -146,8 +146,7 @@ static struct stack_record *depot_alloc_stack(unsigned long *entries, int size, return stack; }
-#define STACK_HASH_ORDER 20 -#define STACK_HASH_SIZE (1L << STACK_HASH_ORDER) +#define STACK_HASH_SIZE (1L << CONFIG_STACK_HASH_ORDER) #define STACK_HASH_MASK (STACK_HASH_SIZE - 1) #define STACK_HASH_SEED 0x9747b28c