• Rashmica Gupta's avatar
    powerpc/memtrace: Remove memory in chunks · 3f7daf3d
    Rashmica Gupta authored
    When hot-removing memory release_mem_region_adjustable() splits iomem
    resources if they are not the exact size of the memory being
    hot-deleted. Adding this memory back to the kernel adds a new resource.
    
    Eg a node has memory 0x0 - 0xfffffffff. Hot-removing 1GB from
    0xf40000000 results in the single resource 0x0-0xfffffffff being split
    into two resources: 0x0-0xf3fffffff and 0xf80000000-0xfffffffff.
    
    When we hot-add the memory back we now have three resources:
    0x0-0xf3fffffff, 0xf40000000-0xf7fffffff, and 0xf80000000-0xfffffffff.
    
    This is an issue if we try to remove some memory that overlaps
    resources. Eg when trying to remove 2GB at address 0xf40000000,
    release_mem_region_adjustable() fails as it expects the chunk of memory
    to be within the boundaries of a single resource. We then get the
    warning: "Unable to release resource" and attempting to use memtrace
    again gives us this error: "bash: echo: write error: Resource
    temporarily unavailable"
    
    This patch makes memtrace remove memory in chunks that are always the
    same size from an address that is always equal to end_of_memory -
    n*size, for some n. So hotremoving and hotadding memory of different
    sizes will now not attempt to remove memory that spans multiple
    resources.
    Signed-off-by: default avatarRashmica Gupta <rashmica.g@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    3f7daf3d
memtrace.c 7.27 KB