• Dave Hansen's avatar
    mm/memory-hotplug: Allow memory resources to be children · 2794129e
    Dave Hansen authored
    The mm/resource.c code is used to manage the physical address
    space.  The current resource configuration can be viewed in
    /proc/iomem.  An example of this is at the bottom of this
    description.
    
    The nvdimm subsystem "owns" the physical address resources which
    map to persistent memory and has resources inserted for them as
    "Persistent Memory".  The best way to repurpose this for volatile
    use is to leave the existing resource in place, but add a "System
    RAM" resource underneath it. This clearly communicates the
    ownership relationship of this memory.
    
    The request_resource_conflict() API only deals with the
    top-level resources.  Replace it with __request_region() which
    will search for !IORESOURCE_BUSY areas lower in the resource
    tree than the top level.
    
    We *could* also simply truncate the existing top-level
    "Persistent Memory" resource and take over the released address
    space.  But, this means that if we ever decide to hot-unplug the
    "RAM" and give it back, we need to recreate the original setup,
    which may mean going back to the BIOS tables.
    
    This should have no real effect on the existing collision
    detection because the areas that truly conflict should be marked
    IORESOURCE_BUSY.
    
    00000000-00000fff : Reserved
    00001000-0009fbff : System RAM
    0009fc00-0009ffff : Reserved
    000a0000-000bffff : PCI Bus 0000:00
    000c0000-000c97ff : Video ROM
    000c9800-000ca5ff : Adapter ROM
    000f0000-000fffff : Reserved
      000f0000-000fffff : System ROM
    00100000-9fffffff : System RAM
      01000000-01e071d0 : Kernel code
      01e071d1-027dfdff : Kernel data
      02dc6000-0305dfff : Kernel bss
    a0000000-afffffff : Persistent Memory (legacy)
      a0000000-a7ffffff : System RAM
    b0000000-bffdffff : System RAM
    bffe0000-bfffffff : Reserved
    c0000000-febfffff : PCI Bus 0000:00
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
    Reviewed-by: default avatarVishal Verma <vishal.l.verma@intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Ross Zwisler <zwisler@kernel.org>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: linux-nvdimm@lists.01.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mm@kvack.org
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Fengguang Wu <fengguang.wu@intel.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>
    Cc: Takashi Iwai <tiwai@suse.de>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: Keith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    2794129e
memory_hotplug.c 48 KB