From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD2DF3AEF46; Mon, 21 Sep 2026 20:00:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790020835; cv=none; b=C0vuJsBB3eG9xtTuxTFFLWYVS5ir+cW51ExLQsTTS0BzuGMGfj6D5A6QfjEcYQIMMOMjYFvBhFBa1SfHMYHigfpEa3i4cgf4SlqMs9/Rk2EL2i825wyNOQCZW2mimaxAzH18I/sgluB3hsffY680AivT4H0yvCs1hqd16K7NfkQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790020835; c=relaxed/simple; bh=MAPvsLwqeTEpF0LPG4Zd4p1dImR5G5txQSW8jy2p0x0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HPuHlRS3KFv/DP5QEodZ1PrepRtA8QIVXme/6zSyRFLYukEEMMR76mzw1/DSRGp1YZefTkgUFkzNUAZ0zD30GYz8yknXX1T7JJW7DdAwA6cnbx+t3SJMeN0xXtyM01kr4RnUooXeBvJOtng+UtddAdPOyzu4FBtfLYIEP6GC/nY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CiceSYwR; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CiceSYwR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3DC41F00898; Mon, 21 Sep 2026 20:00:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790020832; bh=yBc8LKQV5IFSgEgJspkfgYC6oU0VoqbkBUUOKxrLma4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=CiceSYwR28kIPNtzcNquf4Sh/wpB3CCKPRYksMJN0pwKLDxPCWxVukiYM4DxQ1uTQ SEyzoPrbJ5ELSiIrtANuNkJV7S8MtyUoCOp7LEpkk0/CeCf0gAfnzuyNRun28aUl2j S6CCU8Quz/caod0JWfTGcdm3JUBY16Pb6xp4qcZU7zUdDsZa9t4mvzMswZ9fekHhR6 /3NCDf1sJ1RTAEEAmjXdgnYnkuYzs1MMFkx2WTFgquIsiNO9qpO8nQKx/JvJkFbVyv qGiLYaZ0JvQTPplNs8Ap8BLhHKMLPDtU4sieD9ykGvDQxG3G/uyKwav/Z9fRcRZitD PnfcGMkZvExJA== From: "David Hildenbrand (Arm)" Date: Mon, 21 Sep 2026 21:59:00 +0200 Subject: [PATCH v2 08/13] mm/sparse: move __highest_used_section_nr handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260921-b4-sparsemem_cleanups-v2-8-54d81d65e125@kernel.org> References: <20260921-b4-sparsemem_cleanups-v2-0-54d81d65e125@kernel.org> In-Reply-To: <20260921-b4-sparsemem_cleanups-v2-0-54d81d65e125@kernel.org> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Kairui Song , Qi Zheng , Shakeel Butt , Barry Song , Axel Rasmussen , Yuanchu Xie , Wei Xu , Baoquan He , Baolin Wang , Brendan Jackman , Johannes Weiner , Zi Yan , Jan Kiszka , Kieran Bingham , Oscar Salvador , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-cxl@vger.kernel.org, driver-core@lists.linux.dev, linux-fsdevel@vger.kernel.org X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2996; i=david@kernel.org; h=from:subject:message-id; bh=MAPvsLwqeTEpF0LPG4Zd4p1dImR5G5txQSW8jy2p0x0=; b=owGbwMvMwCF2/OVpCdfQ3ZWMp9WSGLI29rSFGC3dkXbvkGKa5dnAUxud6j/kdO5f0lJlNf33V 6bTWfXyHaUsDGIcDLJiiixBwfcNXr5cV1vtxscMM4eVCWQIAxenAExkxxtGhhXfSo9k71N907zI a1FqCS+DwBsOMZGuHsngK3bK9fNO+jD8d095IxFZ8c9UN1HWXURgtuC0Cw/57nJPsVL9b9j8awk XNwA= X-Developer-Key: i=david@kernel.org; a=openpgp; fpr=1BD9CAAD735C4C3A460DFCCA4DDE10F700FF835A In preparation for removing __section_mark_present(), let's move __highest_used_section_nr handling into its callers. Verify in sparse_init_one_section() that it was properly updated. In sparse_sections_init() we can just set it to the last processed section_nr. No functional change intended. Reviewed-by: Mike Rapoport (Microsoft) Signed-off-by: David Hildenbrand (Arm) --- mm/sparse-vmemmap.c | 1 + mm/sparse.c | 5 +++-- mm/sparse.h | 4 +--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 96506f594924c..e89efb67e8e6d 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -865,6 +865,7 @@ int __meminit sparse_add_section(int nid, unsigned long start_pfn, page_init_poison(memmap, sizeof(struct page) * nr_pages); __section_mark_present(ms, section_nr); + __highest_used_section_nr = max(section_nr, __highest_used_section_nr); /* Align memmap to section boundary in the subsection case */ if (section_nr_to_pfn(section_nr) != start_pfn) diff --git a/mm/sparse.c b/mm/sparse.c index bb89017254f4d..a0f50ca5acf5a 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -177,7 +177,7 @@ static inline unsigned long first_present_section_nr(void) void __init sparse_sections_init(void) { - unsigned long pfn, start_pfn, end_pfn; + unsigned long pfn, start_pfn, end_pfn, section_nr; int i, nid; sparse_extreme_init(); @@ -187,9 +187,9 @@ void __init sparse_sections_init(void) mminit_validate_memmodel_limits(&start_pfn, &end_pfn); for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) { - unsigned long section_nr = pfn_to_section_nr(pfn); struct mem_section *ms; + section_nr = pfn_to_section_nr(pfn); sparse_index_init(section_nr, nid); ms = __nr_to_section(section_nr); if (ms->section_mem_map) @@ -201,6 +201,7 @@ void __init sparse_sections_init(void) __section_mark_present(ms, section_nr); } } + __highest_used_section_nr = section_nr; } #ifndef CONFIG_SPARSEMEM_VMEMMAP struct page __init *__populate_section_memmap(unsigned long pfn, diff --git a/mm/sparse.h b/mm/sparse.h index 242b7bab0013c..c396d5c05cfc8 100644 --- a/mm/sparse.h +++ b/mm/sparse.h @@ -26,6 +26,7 @@ static inline void sparse_init_one_section(struct mem_section *ms, unsigned long coded_mem_map; BUILD_BUG_ON(SECTION_MAP_LAST_BIT > PFN_SECTION_SHIFT); + VM_WARN_ON_ONCE(section_nr > __highest_used_section_nr); /* * We encode the start PFN of the section into the mem_map such that @@ -44,9 +45,6 @@ static inline void sparse_init_one_section(struct mem_section *ms, static inline void __section_mark_present(struct mem_section *ms, unsigned long section_nr) { - if (section_nr > __highest_used_section_nr) - __highest_used_section_nr = section_nr; - ms->section_mem_map |= SECTION_MARKED_PRESENT; } -- 2.43.0