• Qian Cai's avatar
    debugobjects: call debug_objects_mem_init eariler · a9ee3a63
    Qian Cai authored
    The current value of the early boot static pool size, 1024 is not big
    enough for systems with large number of CPUs with timer or/and workqueue
    objects selected.  As the results, systems have 60+ CPUs with both timer
    and workqueue objects enabled could trigger "ODEBUG: Out of memory.
    ODEBUG disabled".
    
    Some debug objects are allocated during the early boot.  Enabling some
    options like timers or workqueue objects may increase the size required
    significantly with large number of CPUs.  For example,
    
    CONFIG_DEBUG_OBJECTS_TIMERS:
    No. CPUs x 2 (worker pool) objects:
    start_kernel
      workqueue_init_early
        init_worker_pool
          init_timer_key
            debug_object_init
    
    plus No. CPUs objects (CONFIG_HIGH_RES_TIMERS):
    sched_init
      hrtick_rq_init
        hrtimer_init
    
    CONFIG_DEBUG_OBJECTS_WORK:
    No. CPUs objects:
    vmalloc_init
      __init_work
    
    plus No. CPUs x 6 (workqueue) objects:
    workqueue_init_early
      alloc_workqueue
        __alloc_workqueue_key
          alloc_and_link_pwqs
            init_pwq
    
    Also, plus No. CPUs objects:
    perf_event_init
      __init_srcu_struct
        init_srcu_struct_fields
          init_srcu_struct_nodes
            __init_work
    
    However, none of the things are actually used or required before
    debug_objects_mem_init() is invoked, so just move the call right before
    vmalloc_init().
    
    According to tglx, "the reason why the call is at this place in
    start_kernel() is historical.  It's because back in the days when
    debugobjects were added the memory allocator was enabled way later than
    today."
    
    Link: http://lkml.kernel.org/r/20181126102407.1836-1-cai@gmx.usSigned-off-by: default avatarQian Cai <cai@gmx.us>
    Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Waiman Long <longman@redhat.com>
    Cc: Yang Shi <yang.shi@linux.alibaba.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a9ee3a63