| From 9f88eb4df728aebcd2ddd154d99f1d75b428b897 Mon Sep 17 00:00:00 2001 |
| From: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Date: Mon, 28 Nov 2016 11:40:27 +0100 |
| Subject: s390/kexec: use node 0 when re-adding crash kernel memory |
| |
| From: Heiko Carstens <heiko.carstens@de.ibm.com> |
| |
| commit 9f88eb4df728aebcd2ddd154d99f1d75b428b897 upstream. |
| |
| When re-adding crash kernel memory within setup_resources() the |
| function memblock_add() is used. That function will add memory by |
| default to node "MAX_NUMNODES" instead of node 0, like the memory |
| detection code does. In case of !NUMA this will trigger this warning |
| when the kernel generates the vmemmap: |
| |
| Usage of MAX_NUMNODES is deprecated. Use NUMA_NO_NODE instead |
| WARNING: CPU: 0 PID: 0 at mm/memblock.c:1261 memblock_virt_alloc_internal+0x76/0x220 |
| CPU: 0 PID: 0 Comm: swapper Not tainted 4.9.0-rc6 #16 |
| Call Trace: |
| [<0000000000d0b2e8>] memblock_virt_alloc_try_nid+0x88/0xc8 |
| [<000000000083c8ea>] __earlyonly_bootmem_alloc.constprop.1+0x42/0x50 |
| [<000000000083e7f4>] vmemmap_populate+0x1ac/0x1e0 |
| [<0000000000840136>] sparse_mem_map_populate+0x46/0x68 |
| [<0000000000d0c59c>] sparse_init+0x184/0x238 |
| [<0000000000cf45f6>] paging_init+0xbe/0xf8 |
| [<0000000000cf1d4a>] setup_arch+0xa02/0xae0 |
| [<0000000000ced75a>] start_kernel+0x72/0x450 |
| [<0000000000100020>] _stext+0x20/0x80 |
| |
| If NUMA is selected numa_setup_memory() will fix the node assignments |
| before the vmemmap will be populated; so this warning will only appear |
| if NUMA is not selected. |
| |
| To fix this simply use memblock_add_node() and re-add crash kernel |
| memory explicitly to node 0. |
| |
| Reported-and-tested-by: Christian Borntraeger <borntraeger@de.ibm.com> |
| Fixes: 4e042af463f8 ("s390/kexec: fix crash on resize of reserved memory") |
| Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/s390/kernel/setup.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/s390/kernel/setup.c |
| +++ b/arch/s390/kernel/setup.c |
| @@ -445,7 +445,7 @@ static void __init setup_resources(void) |
| * part of the System RAM resource. |
| */ |
| if (crashk_res.end) { |
| - memblock_add(crashk_res.start, resource_size(&crashk_res)); |
| + memblock_add_node(crashk_res.start, resource_size(&crashk_res), 0); |
| memblock_reserve(crashk_res.start, resource_size(&crashk_res)); |
| insert_resource(&iomem_resource, &crashk_res); |
| } |