sparc64: Fix find_node warning if numa node cannot be found
[ Upstream commit
74a5ed5c4f692df2ff0a2313ea71e81243525519 ]
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: Thomas Tai <thomas.tai@oracle.com>
Reviewed-by: Chris Hyser <chris.hyser@oracle.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>