• David Hildenbrand's avatar
    kernel/resource: make release_mem_region_adjustable() never fail · ec62d04e
    David Hildenbrand authored
    Patch series "selective merging of system ram resources", v4.
    
    Some add_memory*() users add memory in small, contiguous memory blocks.
    Examples include virtio-mem, hyper-v balloon, and the XEN balloon.
    
    This can quickly result in a lot of memory resources, whereby the actual
    resource boundaries are not of interest (e.g., it might be relevant for
    DIMMs, exposed via /proc/iomem to user space).  We really want to merge
    added resources in this scenario where possible.
    
    Resources are effectively stored in a list-based tree.  Having a lot of
    resources not only wastes memory, it also makes traversing that tree more
    expensive, and makes /proc/iomem explode in size (e.g., requiring
    kexec-tools to manually merge resources when creating a kdump header.  The
    current kexec-tools resource count limit does not allow for more than
    ~100GB of memory with a memory block size of 128MB on x86-64).
    
    Let's allow to selectively merge system ram resources by specifying a new
    flag for add_memory*().  Patch #5 contains a /proc/iomem example.  Only
    tested with virtio-mem.
    
    This patch (of 8):
    
    Let's make sure splitting a resource on memory hotunplug will never fail.
    This will become more relevant once we merge selected System RAM resources
    - then, we'll trigger that case more often on memory hotunplug.
    
    In general, this function is already unlikely to fail.  When we remove
    memory, we free up quite a lot of metadata (memmap, page tables, memory
    block device, etc.).  The only reason it could really fail would be when
    injecting allocation errors.
    
    All other error cases inside release_mem_region_adjustable() seem to be
    sanity checks if the function would be abused in different context - let's
    add WARN_ON_ONCE() in these cases so we can catch them.
    
    [natechancellor@gmail.com: fix use of ternary condition in release_mem_region_adjustable]
      Link: https://lkml.kernel.org/r/20200922060748.2452056-1-natechancellor@gmail.com
      Link: https://github.com/ClangBuiltLinux/linux/issues/1159Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Wei Yang <richardw.yang@linux.intel.com>
    Cc: Anton Blanchard <anton@ozlabs.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Julien Grall <julien@xen.org>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Leonardo Bras <leobras.c@gmail.com>
    Cc: Libor Pechacek <lpechacek@suse.cz>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Nathan Lynch <nathanl@linux.ibm.com>
    Cc: "Oliver O'Halloran" <oohall@gmail.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Roger Pau Monn <roger.pau@citrix.com>
    Cc: Stefano Stabellini <sstabellini@kernel.org>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Wei Liu <wei.liu@kernel.org>
    Link: https://lkml.kernel.org/r/20200911103459.10306-2-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ec62d04e
memory_hotplug.c 49.3 KB