lib: stackdepot: add support to configure STACK_HASH_SIZE
authorYogesh Lal <ylal@codeaurora.org>
Fri, 26 Feb 2021 01:21:24 +0000 (17:21 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Feb 2021 17:41:04 +0000 (09:41 -0800)
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@codeaurora.org
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>
lib/Kconfig
lib/stackdepot.c

index 46806332a8cc2c3235a379b4300d113da959bbe0..a38cc61256f1a44e011e7a9f72042900221f9e4d 100644 (file)
@@ -651,6 +651,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 SBITMAP
        bool
 
index 890dcc2e984e363268939d2b678a3d5f117b7e56..4b9715470e872233a5ffbbb8e675e7f0b1369686 100644 (file)
@@ -141,8 +141,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