diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2015-04-16 15:47:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-17 09:04:06 -0400 |
commit | ff691f6e03815dc8f99461ea509df863a879fc3a (patch) | |
tree | acc3b3c61ff40365d15cbe89952c743b301016af /init | |
parent | 3ea7f5e25ec271909451b7dc17be37581b888de6 (diff) |
kernel/fork.c: new function for max_threads
PAGE_SIZE is not guaranteed to be equal to or less than 8 times the
THREAD_SIZE.
E.g. architecture hexagon may have page size 1M and thread size 4096.
This would lead to a division by zero in the calculation of max_threads.
With this patch the buggy code is moved to a separate function
set_max_threads. The error is not fixed.
After fixing the problem in a separate patch the new function can be
reused to adjust max_threads after adding or removing memory.
Argument mempages of function fork_init() is removed as totalram_pages is
an exported symbol.
The creation of separate patches for refactoring to a new function and for
fixing the logic was suggested by Ingo Molnar.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'init')
-rw-r--r-- | init/main.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/init/main.c b/init/main.c index a7e969d12f51..2115055faeac 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -91,7 +91,7 @@ | |||
91 | static int kernel_init(void *); | 91 | static int kernel_init(void *); |
92 | 92 | ||
93 | extern void init_IRQ(void); | 93 | extern void init_IRQ(void); |
94 | extern void fork_init(unsigned long); | 94 | extern void fork_init(void); |
95 | extern void radix_tree_init(void); | 95 | extern void radix_tree_init(void); |
96 | #ifndef CONFIG_DEBUG_RODATA | 96 | #ifndef CONFIG_DEBUG_RODATA |
97 | static inline void mark_rodata_ro(void) { } | 97 | static inline void mark_rodata_ro(void) { } |
@@ -645,7 +645,7 @@ asmlinkage __visible void __init start_kernel(void) | |||
645 | #endif | 645 | #endif |
646 | thread_info_cache_init(); | 646 | thread_info_cache_init(); |
647 | cred_init(); | 647 | cred_init(); |
648 | fork_init(totalram_pages); | 648 | fork_init(); |
649 | proc_caches_init(); | 649 | proc_caches_init(); |
650 | buffer_init(); | 650 | buffer_init(); |
651 | key_init(); | 651 | key_init(); |