• David Hildenbrand's avatar
    drivers/base/memory.c: drop pages_correctly_probed() · fada9ae3
    David Hildenbrand authored
    pages_correctly_probed() is a leftover from ancient times.  It dates back
    to commit 3947be19 ("[PATCH] memory hotplug: sysfs and add/remove
    functions"), where Pg_reserved checks were added as a sfety net:
    
    	/*
    	 * The probe routines leave the pages reserved, just
    	 * as the bootmem code does.  Make sure they're still
    	 * that way.
    	 */
    
    The checks were refactored quite a bit over the years, especially in
    commit b77eab70 ("mm/memory_hotplug: optimize probe routine"), where
    checks for present, valid, and online sections were added.
    
    Hotplugged memory is added via add_memory(), which will create the full
    memmap for the hotplugged memory, and mark all sections valid and present.
    
    Only full memory blocks are onlined/offlined, so we also cannot have an
    inconsistency in that regard (especially, memory blocks with some sections
    being online and some being offline).
    
    1. Boot memory always starts online.  Since commit c5e79ef5
       ("mm/memory_hotplug.c: don't allow to online/offline memory blocks with
       holes") we disallow to offline any memory with holes.  Therefore, we
       never online memory with holes.  Present and validity checks are
       superfluous.
    
    2. Only complete memory blocks are onlined/offlined (and especially,
       the state - online or offline - is stored for whole memory blocks).
       Besides the core, only arch/powerpc/platforms/powernv/memtrace.c
       manually calls offline_pages() and fiddels with memory block states.
       But it also only offlines complete memory blocks.
    
    3. To make any of these conditions trigger, something would have to be
       terribly messed up in the core.  (e.g., online/offline only some
       sections of a memory block).
    
    4. Memory unplug properly makes sure that all sysfs attributes were
       removed (and therefore, that all threads left the sysfs handlers).  We
       don't have to worry about zombie devices at this point.
    
    5. The valid_section_nr(section_nr) check is actually dead code, as it
       would never have been reached due to the WARN_ON_ONCE(!pfn_valid(pfn)).
    
    No wonder we haven't seen any of these errors in a long time (or even
       ever, according to my search).  Let's just get rid of them.  Now, all
       checks that could hinder onlining and offlining are completely
       contained in online_pages()/offline_pages().
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: http://lkml.kernel.org/r/20200127110424.5757-3-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    fada9ae3
memory.c 20 KB