lkml.org 
[lkml]   [2018]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 094/107] s390/numa: move initial setup of node_to_cpumask_map
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Martin Schwidefsky <schwidefsky@de.ibm.com>

    commit fb7d7518b0d65955f91c7b875c36eae7694c69bd upstream.

    The numa_init_early initcall sets the node_to_cpumask_map[0] to the
    full cpu_possible_mask. Unfortunately this early_initcall is too late,
    the NUMA setup for numa=emu is done even earlier. The order of calls
    is numa_setup() -> emu_update_cpu_topology(), then the early_initcalls(),
    followed by sched_init_domains().

    Starting with git commit 051f3ca02e46432c0965e8948f00c07d8a2f09c0
    "sched/topology: Introduce NUMA identity node sched domain"
    the incorrect node_to_cpumask_map[0] really screws up the domain
    setup and the kernel panics with the follow oops:

    Cc: <stable@vger.kernel.org> # v4.15+
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/s390/numa/numa.c | 16 ++--------------
    1 file changed, 2 insertions(+), 14 deletions(-)

    --- a/arch/s390/numa/numa.c
    +++ b/arch/s390/numa/numa.c
    @@ -133,6 +133,8 @@ void __init numa_setup(void)
    {
    pr_info("NUMA mode: %s\n", mode->name);
    nodes_clear(node_possible_map);
    + /* Initially attach all possible CPUs to node 0. */
    + cpumask_copy(&node_to_cpumask_map[0], cpu_possible_mask);
    if (mode->setup)
    mode->setup();
    numa_setup_memory();
    @@ -140,20 +142,6 @@ void __init numa_setup(void)
    }

    /*
    - * numa_init_early() - Initialization initcall
    - *
    - * This runs when only one CPU is online and before the first
    - * topology update is called for by the scheduler.
    - */
    -static int __init numa_init_early(void)
    -{
    - /* Attach all possible CPUs to node 0 for now. */
    - cpumask_copy(&node_to_cpumask_map[0], cpu_possible_mask);
    - return 0;
    -}
    -early_initcall(numa_init_early);
    -
    -/*
    * numa_init_late() - Initialization initcall
    *
    * Register NUMA nodes.

    \
     
     \ /
      Last update: 2018-09-03 19:49    [W:4.378 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site