• Thomas Gleixner's avatar
    mm, slab/slub: Ensure kmem_cache_alloc_bulk() is available early · f5451547
    Thomas Gleixner authored
    The memory allocators are available during early boot even in the phase
    where interrupts are disabled and scheduling is not yet possible.
    
    The setup is so that GFP_KERNEL allocations work in this phase without
    causing might_alloc() splats to be emitted because the system state is
    SYSTEM_BOOTING at that point which prevents the warnings to trigger.
    
    Most allocation/free functions use local_irq_save()/restore() or a lock
    variant of that. But kmem_cache_alloc_bulk() and kmem_cache_free_bulk() use
    local_[lock]_irq_disable()/enable(), which leads to a lockdep warning when
    interrupts are enabled during the early boot phase.
    
    This went unnoticed so far as there are no early users of these
    interfaces. The upcoming conversion of the interrupt descriptor store from
    radix_tree to maple_tree triggered this warning as maple_tree uses the bulk
    interface.
    
    Cure this by moving the kmem_cache_alloc/free() bulk variants of SLUB and
    SLAB to local[_lock]_irq_save()/restore().
    
    There is obviously no reclaim possible and required at this point so there
    is no need to expand this coverage further.
    
    No functional change.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    f5451547
slub.c 161 KB