On Fri, Jul 12, 2019 at 10:51:31AM +0200, KarimAllah Ahmed wrote: >Do not mark regions that are marked with nomap to be present, otherwise >these memblock cause unnecessarily allocation of metadata. > >Cc: Andrew Morton <a...@linux-foundation.org> >Cc: Pavel Tatashin <pasha.tatas...@oracle.com> >Cc: Oscar Salvador <osalva...@suse.de> >Cc: Michal Hocko <mho...@suse.com> >Cc: Mike Rapoport <r...@linux.ibm.com> >Cc: Baoquan He <b...@redhat.com> >Cc: Qian Cai <c...@lca.pw> >Cc: Wei Yang <richard.weiy...@gmail.com> >Cc: Logan Gunthorpe <log...@deltatee.com> >Cc: linux...@kvack.org >Cc: linux-kernel@vger.kernel.org >Signed-off-by: KarimAllah Ahmed <karah...@amazon.de> >--- > mm/sparse.c | 4 ++++ > 1 file changed, 4 insertions(+) > >diff --git a/mm/sparse.c b/mm/sparse.c >index fd13166..33810b6 100644 >--- a/mm/sparse.c >+++ b/mm/sparse.c >@@ -256,6 +256,10 @@ void __init memblocks_present(void) > struct memblock_region *reg; > > for_each_memblock(memory, reg) { >+ >+ if (memblock_is_nomap(reg)) >+ continue; >+ > memory_present(memblock_get_region_node(reg), > memblock_region_memory_base_pfn(reg), > memblock_region_memory_end_pfn(reg));
The logic looks good, while I am not sure this would take effect. Since the metadata is SECTION size aligned while memblock is not. If I am correct, on arm64, we mark nomap memblock in map_mem() memblock_mark_nomap(kernel_start, kernel_end - kernel_start); And kernel text area is less than 40M, if I am right. This means memblocks_present would still mark the section present. Would you mind showing how much memory range it is marked nomap? >-- >2.7.4 -- Wei Yang Help you, Help me