Messages in this thread Patch in this message | | | From | Wei Yang <> | Subject | [PATCH 3/3] mm/sparsemem: avoid memmap overwrite for non-SPARSEMEM_VMEMMAP | Date | Fri, 7 Feb 2020 07:16:29 +0800 |
| |
In case of SPARSEMEM, populate_section_memmap() would allocate memmap for the whole section, even we just want a sub-section. This would lead to memmap overwrite if we a sub-section to an already populated section.
Just return the populated memmap for non-SPARSEMEM_VMEMMAP case.
Fixes: ba72b4c8cf60 ("mm/sparsemem: support sub-section hotplug") Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> CC: Dan Williams <dan.j.williams@intel.com> --- mm/sparse.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/mm/sparse.c b/mm/sparse.c index 56816f653588..c75ca40db513 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -836,6 +836,16 @@ static struct page * __meminit section_activate(int nid, unsigned long pfn, if (nr_pages < PAGES_PER_SECTION && early_section(ms)) return pfn_to_page(pfn); + /* + * If it is not SPARSEMEM_VMEMMAP, we always populate memmap for the + * whole section, even for a sub-section. + * + * Return its memmap if already populated to avoid memmap overwrite. + */ + if (!IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP) && + valid_section(ms)) + return __section_mem_map_addr(ms); + memmap = populate_section_memmap(pfn, nr_pages, nid, altmap); if (!memmap) { section_deactivate(pfn, nr_pages, altmap); -- 2.17.1
| |