• Thomas Tai's avatar
    sparc64: Fix find_node warning if numa node cannot be found · 74a5ed5c
    Thomas Tai authored
    
    
    When booting up LDOM, find_node() warns that a physical address
    doesn't match a NUMA node.
    
    WARNING: CPU: 0 PID: 0 at arch/sparc/mm/init_64.c:835
    find_node+0xf4/0x120 find_node: A physical address doesn't
    match a NUMA node rule. Some physical memory will be
    owned by node 0.Modules linked in:
    
    CPU: 0 PID: 0 Comm: swapper Not tainted 4.9.0-rc3 #4
    Call Trace:
     [0000000000468ba0] __warn+0xc0/0xe0
     [0000000000468c74] warn_slowpath_fmt+0x34/0x60
     [00000000004592f4] find_node+0xf4/0x120
     [0000000000dd0774] add_node_ranges+0x38/0xe4
     [0000000000dd0b1c] numa_parse_mdesc+0x268/0x2e4
     [0000000000dd0e9c] bootmem_init+0xb8/0x160
     [0000000000dd174c] paging_init+0x808/0x8fc
     [0000000000dcb0d0] setup_arch+0x2c8/0x2f0
     [0000000000dc68a0] start_kernel+0x48/0x424
     [0000000000dcb374] start_early_boot+0x27c/0x28c
     [0000000000a32c08] tlb_fixup_done+0x4c/0x64
     [0000000000027f08] 0x27f08
    
    It is because linux use an internal structure node_masks[] to
    keep the best memory latency node only. However, LDOM mdesc can
    contain single latency-group with multiple memory latency nodes.
    
    If the address doesn't match the best latency node within
    node_masks[], it should check for an alternative via mdesc.
    The warning message should only be printed if the address
    doesn't match any node_masks[] nor within mdesc. To minimize
    the impact of searching mdesc every time, the last matched
    mask and index is stored in a variable.
    
    Signed-off-by: default avatarThomas Tai <thomas.tai@oracle.com>
    Reviewed-by: default avatarChris Hyser <chris.hyser@oracle.com>
    Reviewed-by: default avatarLiam Merwick <liam.merwick@oracle.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    74a5ed5c