Skip to content
  • Vlastimil Babka's avatar
    mm, slub: separate detaching of partial list in unfreeze_partials() from unfreezing · c974b7ef
    Vlastimil Babka authored
    
    
    Unfreezing partial list can be split to two phases - detaching the list from
    struct kmem_cache_cpu, and processing the list. The whole operation does not
    need to be protected by disabled irqs. Restructure the code to separate the
    detaching (with disabled irqs) and unfreezing (with irq disabling to be reduced
    in the next patch).
    
    Also, unfreeze_partials() can be called from another cpu on behalf of a cpu
    that is being offlined, where disabling irqs on the local cpu has no sense, so
    restructure the code as follows:
    
    - __unfreeze_partials() is the bulk of unfreeze_partials() that processes the
      detached percpu partial list
    - unfreeze_partials() detaches list from current cpu with irqs disabled and
      calls __unfreeze_partials()
    - unfreeze_partials_cpu() is to be called for the offlined cpu so it needs no
      irq disabling, and is called from __flush_cpu_slab()
    - flush_cpu_slab() is for the local cpu thus it needs to call
      unfreeze_partials(). So it can't simply call
      __flush_cpu_slab(smp_processor_id()) anymore and we have to open-code the
      proper calls.
    
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    c974b7ef