Message ID | 20180628062857.29658-6-bhe@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Jun 28, 2018 at 2:29 AM Baoquan He <bhe@redhat.com> wrote: > > Pavel pointed out that the behaviour of allocating memmap together > for one node should be defaulted for all ARCH-es. It won't break > anything because it will drop to the fallback action to allocate > imemmap for each section at one time if failed on large chunk of > memory. > > So remove CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER and clean up the > related codes. > > Signed-off-by: Baoquan He <bhe@redhat.com> > Cc: Pavel Tatashin <pasha.tatashin@oracle.com> Reviewed-by: Pavel Tatashin <pasha.tatashin@oracle.com>
Hi, On Thu, Jun 28, 2018 at 02:28:57PM +0800, Baoquan He wrote: > Pavel pointed out that the behaviour of allocating memmap together > for one node should be defaulted for all ARCH-es. It won't break > anything because it will drop to the fallback action to allocate > imemmap for each section at one time if failed on large chunk of > memory. > > So remove CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER and clean up the > related codes. > This patch causes several of my qemu boot tests to fail. powerpc:mac99:ppc64_book3s_defconfig:initrd:nosmp powerpc:mac99:ppc64_book3s_defconfig:initrd:smp4 powerpc:mac99:ppc64_book3s_defconfig:rootfs:smp4 powerpc:pseries:pseries_defconfig:initrd powerpc:pseries:pseries_defconfig:rootfs powerpc:powernv:powernv_defconfig:initrd Bisect points to this patch. Bisect log is attached for reference. Reverting the patch fixes the problem. [ Yes, I am aware that Michael already reported the problem at https://lkml.org/lkml/2018/7/11/480 ] Guenter --- # bad: [98be45067040799a801e6ce52d8bf4659a153893] Add linux-next specific files for 20180711 # good: [1e4b044d22517cae7047c99038abb444423243ca] Linux 4.18-rc4 git bisect start 'HEAD' 'v4.18-rc4' # good: [ade30e73739a5174bcaee5860fee76c2365548c5] Merge remote-tracking branch 'crypto/master' git bisect good ade30e73739a5174bcaee5860fee76c2365548c5 # good: [792be221c35d19a1c486789e5b5c91c05279b94d] Merge remote-tracking branch 'tip/auto-latest' git bisect good 792be221c35d19a1c486789e5b5c91c05279b94d # good: [1d66737ba99400ab9a79c906a25b2090f4cc8b18] Merge remote-tracking branch 'mux/for-next' git bisect good 1d66737ba99400ab9a79c906a25b2090f4cc8b18 # good: [c02d5416bd8504866dd80d2129f4648747166b6f] Merge remote-tracking branch 'kspp/for-next/kspp' git bisect good c02d5416bd8504866dd80d2129f4648747166b6f # bad: [1e741337a9416010a48c6034855e316ba8057111] ntb: ntb_hw_switchtec: cleanup 64bit IO defines to use the common header git bisect bad 1e741337a9416010a48c6034855e316ba8057111 # good: [205a106bac127145a4defae7d0d35945001fe924] kernel/memremap, kasan: make ZONE_DEVICE with work with KASAN git bisect good 205a106bac127145a4defae7d0d35945001fe924 # bad: [e87ebebf76c9ceeaea21a256341d6765c657e550] mm, oom: remove sleep from under oom_lock git bisect bad e87ebebf76c9ceeaea21a256341d6765c657e550 # good: [9f95e9e87283a578fb676f14fd5e1edd4cb401f7] mm/vmscan.c: iterate only over charged shrinkers during memcg shrink_slab() git bisect good 9f95e9e87283a578fb676f14fd5e1edd4cb401f7 # bad: [0ba29a108979bdbe3f77094e8b5cc06652e2698b] mm/sparse: Remove CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER git bisect bad 0ba29a108979bdbe3f77094e8b5cc06652e2698b # good: [ca464c7768574c49f58a5be8962330814262820f] mm/sparse.c: add a static variable nr_present_sections git bisect good ca464c7768574c49f58a5be8962330814262820f # good: [4f02f8533cbad406e004b3bfe75f65e6b791efd5] mm/sparse.c: add a new parameter 'data_unit_size' for alloc_usemap_and_memmap git bisect good 4f02f8533cbad406e004b3bfe75f65e6b791efd5 # good: [110cb339e5d95c77cf83d33de25f6f392d0ca7f6] mm-sparse-optimize-memmap-allocation-during-sparse_init-checkpatch-fixes git bisect good 110cb339e5d95c77cf83d33de25f6f392d0ca7f6 # first bad commit: [0ba29a108979bdbe3f77094e8b5cc06652e2698b] mm/sparse: Remove CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER
diff --git a/mm/Kconfig b/mm/Kconfig index ce95491abd6a..75a196bf83e6 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -115,10 +115,6 @@ config SPARSEMEM_EXTREME config SPARSEMEM_VMEMMAP_ENABLE bool -config SPARSEMEM_ALLOC_MEM_MAP_TOGETHER - def_bool y - depends on SPARSEMEM && X86_64 - config SPARSEMEM_VMEMMAP bool "Sparse Memory virtual memmap" depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE diff --git a/mm/sparse.c b/mm/sparse.c index e1767d9fe4f3..d18e2697a781 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -458,7 +458,6 @@ void __init sparse_mem_maps_populate_node(struct page **map_map, } #endif /* !CONFIG_SPARSEMEM_VMEMMAP */ -#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER static void __init sparse_early_mem_maps_alloc_node(void *data, unsigned long pnum_begin, unsigned long pnum_end, @@ -468,22 +467,6 @@ static void __init sparse_early_mem_maps_alloc_node(void *data, sparse_mem_maps_populate_node(map_map, pnum_begin, pnum_end, map_count, nodeid); } -#else -static struct page __init *sparse_early_mem_map_alloc(unsigned long pnum) -{ - struct page *map; - struct mem_section *ms = __nr_to_section(pnum); - int nid = sparse_early_nid(ms); - - map = sparse_mem_map_populate(pnum, nid, NULL); - if (map) - return map; - - pr_err("%s: sparsemem memory map backing failed some memory will not be available\n", - __func__); - return NULL; -} -#endif void __weak __meminit vmemmap_populate_print_last(void) { @@ -545,14 +528,11 @@ void __init sparse_init(void) { unsigned long pnum; struct page *map; + struct page **map_map; unsigned long *usemap; unsigned long **usemap_map; - int size; + int size, size2; int nr_consumed_maps = 0; -#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER - int size2; - struct page **map_map; -#endif /* see include/linux/mmzone.h 'struct mem_section' definition */ BUILD_BUG_ON(!is_power_of_2(sizeof(struct mem_section))); @@ -579,7 +559,6 @@ void __init sparse_init(void) (void *)usemap_map, sizeof(usemap_map[0])); -#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER size2 = sizeof(struct page *) * nr_present_sections; map_map = memblock_virt_alloc(size2, 0); if (!map_map) @@ -587,7 +566,6 @@ void __init sparse_init(void) alloc_usemap_and_memmap(sparse_early_mem_maps_alloc_node, (void *)map_map, sizeof(map_map[0])); -#endif /* The numner of present sections stored in nr_present_sections * are kept the same since mem sections are marked as present in @@ -613,11 +591,7 @@ void __init sparse_init(void) continue; } -#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER map = map_map[nr_consumed_maps]; -#else - map = sparse_early_mem_map_alloc(pnum); -#endif if (!map) { ms->section_mem_map = 0; nr_consumed_maps++; @@ -631,9 +605,7 @@ void __init sparse_init(void) vmemmap_populate_print_last(); -#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER memblock_free_early(__pa(map_map), size2); -#endif memblock_free_early(__pa(usemap_map), size); }
Pavel pointed out that the behaviour of allocating memmap together for one node should be defaulted for all ARCH-es. It won't break anything because it will drop to the fallback action to allocate imemmap for each section at one time if failed on large chunk of memory. So remove CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER and clean up the related codes. Signed-off-by: Baoquan He <bhe@redhat.com> Cc: Pavel Tatashin <pasha.tatashin@oracle.com> --- mm/Kconfig | 4 ---- mm/sparse.c | 32 ++------------------------------ 2 files changed, 2 insertions(+), 34 deletions(-)