lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 427/846] of: fdt: Aggregate the processing of "linux,usable-memory-range"
    Date
    From: Zhen Lei <thunder.leizhen@huawei.com>

    [ Upstream commit 8347b41748c3019157312fbe7f8a6792ae396eb7 ]

    Currently, we parse the "linux,usable-memory-range" property in
    early_init_dt_scan_chosen(), to obtain the specified memory range of the
    crash kernel. We then reserve the required memory after
    early_init_dt_scan_memory() has identified all available physical memory.
    Because the two pieces of code are separated far, the readability and
    maintainability are reduced. So bring them together.

    Suggested-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    (change the prototype of early_init_dt_check_for_usable_mem_range(), in
    order to use it outside)
    Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
    Tested-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Acked-by: John Donnelly <john.p.donnelly@oracle.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: linux-arm-kernel@lists.infradead.org
    To: devicetree@vger.kernel.org
    To: linux-efi@vger.kernel.org
    Signed-off-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/of/fdt.c | 19 +++++++++++++------
    1 file changed, 13 insertions(+), 6 deletions(-)

    diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
    index 4546572af24bb..105b1a47905ab 100644
    --- a/drivers/of/fdt.c
    +++ b/drivers/of/fdt.c
    @@ -969,18 +969,22 @@ static void __init early_init_dt_check_for_elfcorehdr(unsigned long node)
    elfcorehdr_addr, elfcorehdr_size);
    }

    -static phys_addr_t cap_mem_addr;
    -static phys_addr_t cap_mem_size;
    +static unsigned long chosen_node_offset = -FDT_ERR_NOTFOUND;

    /**
    * early_init_dt_check_for_usable_mem_range - Decode usable memory range
    * location from flat tree
    - * @node: reference to node containing usable memory range location ('chosen')
    */
    -static void __init early_init_dt_check_for_usable_mem_range(unsigned long node)
    +static void __init early_init_dt_check_for_usable_mem_range(void)
    {
    const __be32 *prop;
    int len;
    + phys_addr_t cap_mem_addr;
    + phys_addr_t cap_mem_size;
    + unsigned long node = chosen_node_offset;
    +
    + if ((long)node < 0)
    + return;

    pr_debug("Looking for usable-memory-range property... ");

    @@ -993,6 +997,8 @@ static void __init early_init_dt_check_for_usable_mem_range(unsigned long node)

    pr_debug("cap_mem_start=%pa cap_mem_size=%pa\n", &cap_mem_addr,
    &cap_mem_size);
    +
    + memblock_cap_memory_range(cap_mem_addr, cap_mem_size);
    }

    #ifdef CONFIG_SERIAL_EARLYCON
    @@ -1141,9 +1147,10 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
    (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0))
    return 0;

    + chosen_node_offset = node;
    +
    early_init_dt_check_for_initrd(node);
    early_init_dt_check_for_elfcorehdr(node);
    - early_init_dt_check_for_usable_mem_range(node);

    /* Retrieve command line */
    p = of_get_flat_dt_prop(node, "bootargs", &l);
    @@ -1279,7 +1286,7 @@ void __init early_init_dt_scan_nodes(void)
    of_scan_flat_dt(early_init_dt_scan_memory, NULL);

    /* Handle linux,usable-memory-range property */
    - memblock_cap_memory_range(cap_mem_addr, cap_mem_size);
    + early_init_dt_check_for_usable_mem_range();
    }

    bool __init early_init_dt_scan(void *params)
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-25 00:11    [W:4.028 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site