• David Hildenbrand's avatar
    mm/memory_hotplug: release memory resource after arch_remove_memory() · 8fc09bd2
    David Hildenbrand authored
    [ Upstream commit d9eb1417 ]
    
    Patch series "mm/memory_hotplug: Better error handling when removing
    memory", v1.
    
    Error handling when removing memory is somewhat messed up right now.  Some
    errors result in warnings, others are completely ignored.  Memory unplug
    code can essentially not deal with errors properly as of now.
    remove_memory() will never fail.
    
    We have basically two choices:
    1. Allow arch_remov_memory() and friends to fail, propagating errors via
       remove_memory(). Might be problematic (e.g. DIMMs consisting of multiple
       pieces added/removed separately).
    2. Don't allow the functions to fail, handling errors in a nicer way.
    
    It seems like most errors that can theoretically happen are really corner
    cases and mostly theoretical (e.g.  "section not valid").  However e.g.
    aborting removal of sections while all callers simply continue in case of
    errors is not nice.
    
    If we can gurantee that removal of memory always works (and WARN/skip in
    case of theoretical errors so we can figure out what is going on), we can
    go ahead and implement better error handling when adding memory.
    
    E.g. via add_memory():
    
    arch_add_memory()
    ret = do_stuff()
    if (ret) {
    	arch_remove_memory();
    	goto error;
    }
    
    Handling here that arch_remove_memory() might fail is basically
    impossible.  So I suggest, let's avoid reporting errors while removing
    memory, warning on theoretical errors instead and continuing instead of
    aborting.
    
    This patch (of 4):
    
    __add_pages() doesn't add the memory resource, so __remove_pages()
    shouldn't remove it.  Let's factor it out.  Especially as it is a special
    case for memory used as system memory, added via add_memory() and friends.
    
    We now remove the resource after removing the sections instead of doing it
    the other way around.  I don't think this change is problematic.
    
    add_memory()
    	register memory resource
    	arch_add_memory()
    
    remove_memory
    	arch_remove_memory()
    	release memory resource
    
    While at it, explain why we ignore errors and that it only happeny if
    we remove memory in a different granularity as we added it.
    
    [david@redhat.com: fix printk warning]
      Link: http://lkml.kernel.org/r/20190417120204.6997-1-david@redhat.com
    Link: http://lkml.kernel.org/r/20190409100148.24703-2-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Wei Yang <richard.weiyang@gmail.com>
    Cc: Qian Cai <cai@lca.pw>
    Cc: Arun KS <arunks@codeaurora.org>
    Cc: Mathieu Malaterre <malat@debian.org>
    Cc: Andrew Banman <andrew.banman@hpe.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christophe Leroy <christophe.leroy@c-s.fr>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: Geert Uytterhoeven <geert@linux-m68k.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Mike Rapoport <rppt@linux.ibm.com>
    Cc: Mike Travis <mike.travis@hpe.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: Rich Felker <dalias@libc.org>
    Cc: Rob Herring <robh@kernel.org>
    Cc: Stefan Agner <stefan@agner.ch>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    8fc09bd2
memory_hotplug.c 49 KB