Skip to content
  • David Rientjes's avatar
    slab: add memory hotplug support · 8f9f8d9e
    David Rientjes authored
    
    
    Slab lacks any memory hotplug support for nodes that are hotplugged
    without cpus being hotplugged.  This is possible at least on x86
    CONFIG_MEMORY_HOTPLUG_SPARSE kernels where SRAT entries are marked
    ACPI_SRAT_MEM_HOT_PLUGGABLE and the regions of RAM represent a seperate
    node.  It can also be done manually by writing the start address to
    /sys/devices/system/memory/probe for kernels that have
    CONFIG_ARCH_MEMORY_PROBE set, which is how this patch was tested, and
    then onlining the new memory region.
    
    When a node is hotadded, a nodelist for that node is allocated and
    initialized for each slab cache.  If this isn't completed due to a lack
    of memory, the hotadd is aborted: we have a reasonable expectation that
    kmalloc_node(nid) will work for all caches if nid is online and memory is
    available.
    
    Since nodelists must be allocated and initialized prior to the new node's
    memory actually being online, the struct kmem_list3 is allocated off-node
    due to kmalloc_node()'s fallback.
    
    When an entire node would be offlined, its nodelists are subsequently
    drained.  If slab objects still exist and cannot be freed, the offline is
    aborted.  It is possible that objects will be allocated between this
    drain and page isolation, so it's still possible that the offline will
    still fail, however.
    
    Acked-by: default avatarChristoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
    8f9f8d9e