Messages in this thread Patch in this message | | | From | Qian Cai <> | Subject | [PATCH] debugobjects: add a new Kconfig for POOL_SIZE | Date | Sun, 18 Nov 2018 03:22:55 -0500 |
| |
The current value of ODEBUG_POOL_SIZE is not big enough for large memory systems with timer or/and workqueue objects because during the early boot, timer objects needs at least the size equals to
No. CPUs x 2 (worker pool)
start_kernel workqueue_init_early init_worker_pool init_timer_key debug_object_init
puls, No. CPUs
start_kernel sched_init hrtimer_init debug_object_init
Then, workqueue objects requires even more,
No. CPUs x 2 (worker pool) x 6 (workqueue)
start_kernel workqueue_init_early __alloc_workqueue_key alloc_workqueue init_pwq debug_object_init
plus, No, CPUs x 2 (worker pool)
start_kernel perf_event_init __init_srcu_struct init_srcu_struct_fields __init_work debug_object_init
As the results, systems have 60+ CPUs with both timer and workqueue objects enabled could trigger "ODEBUG: Out of memory. ODEBUG disabled".
Hence, add a new Kconfig option so users could adjust ODEBUG_POOL_SIZE accordingly if either timer or workqueue objects are selected.
Signed-off-by: Qian Cai <cai@gmx.us> --- lib/Kconfig.debug | 12 ++++++++++++ lib/debugobjects.c | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 1af29b8224fd..a4af837649df 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -449,6 +449,18 @@ config DEBUG_OBJECTS kernel to track the life time of various objects and validate the operations on those objects. +config DEBUG_OBJECTS_POOL_SIZE + int "Debug objects pool size" + depends on DEBUG_OBJECTS_TIMERS || DEBUG_OBJECTS_WORK + default 1024 + help + Some debug objects are allocated during the early boot. Enable some + config options may requires the sizes below, + + DEBUG_OBJECTS_TIMERS: No. CPUs x 2 (worker pool) + No. CPUs (hrtimer) + DEBUG_OBJECTS_WORK: No. CPUs x 2 (worker pool) x 6 (workqueue) + + No. CPUs x 2 (worker pool) + config DEBUG_OBJECTS_SELFTEST bool "Debug objects selftest" depends on DEBUG_OBJECTS diff --git a/lib/debugobjects.c b/lib/debugobjects.c index 70935ed91125..eb8158538993 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -23,7 +23,12 @@ #define ODEBUG_HASH_BITS 14 #define ODEBUG_HASH_SIZE (1 << ODEBUG_HASH_BITS) -#define ODEBUG_POOL_SIZE 1024 +#ifdef CONFIG_DEBUG_OBJECTS_POOL_SIZE +#define ODEBUG_POOL_SIZE CONFIG_DEBUG_OBJECTS_POOL_SIZE +#else +#define ODEBUG_POOL_SIZE 1024 +#endif + #define ODEBUG_POOL_MIN_LEVEL 256 #define ODEBUG_CHUNK_SHIFT PAGE_SHIFT -- 2.17.2 (Apple Git-113)
| |