lkml.org 
[lkml]   [2019]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 3/4] dax/kmem: let walk_system_ram_range() search child resources
    From
    Date

    From: Dave Hansen <dave.hansen@linux.intel.com>

    In the process of onlining memory, we use walk_system_ram_range()
    to find the actual RAM areas inside of the area being onlined.

    However, it currently only finds memory resources which are
    "top-level" iomem_resources. Children are not currently
    searched which causes it to skip System RAM in areas like this
    (in the format of /proc/iomem):

    a0000000-bfffffff : Persistent Memory (legacy)
    a0000000-afffffff : System RAM

    Changing the true->false here allows children to be searched
    as well. We need this because we add a new "System RAM"
    resource underneath the "persistent memory" resource when
    we use persistent memory in a volatile mode.

    Cc: Dan Williams <dan.j.williams@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>

    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    ---

    b/kernel/resource.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff -puN kernel/resource.c~mm-walk_system_ram_range-search-child-resources kernel/resource.c
    --- a/kernel/resource.c~mm-walk_system_ram_range-search-child-resources 2018-12-20 11:48:42.824771932 -0800
    +++ b/kernel/resource.c 2018-12-20 11:48:42.827771932 -0800
    @@ -445,6 +445,9 @@ int walk_mem_res(u64 start, u64 end, voi
    * This function calls the @func callback against all memory ranges of type
    * System RAM which are marked as IORESOURCE_SYSTEM_RAM and IORESOUCE_BUSY.
    * It is to be used only for System RAM.
    + *
    + * This will find System RAM ranges that are children of top-level resources
    + * in addition to top-level System RAM resources.
    */
    int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
    void *arg, int (*func)(unsigned long, unsigned long, void *))
    @@ -460,7 +463,7 @@ int walk_system_ram_range(unsigned long
    flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
    while (start < end &&
    !find_next_iomem_res(start, end, flags, IORES_DESC_NONE,
    - true, &res)) {
    + false, &res)) {
    pfn = (res.start + PAGE_SIZE - 1) >> PAGE_SHIFT;
    end_pfn = (res.end + 1) >> PAGE_SHIFT;
    if (end_pfn > pfn)
    _
    \
     
     \ /
      Last update: 2019-01-16 19:26    [W:4.050 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site