From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C2993BED18 for ; Wed, 5 Aug 2026 02:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785896758; cv=none; b=LbThRpuDkNOTGu5haXI1U5MqkH6E61xP1gSU0Anm9FT7Xw5lIJFLzj3S/eLJl+DvlTgcF8DOFO80e/+7MaShieLXOQT77U0OR/eWODcDVIbUr6sdZ0MMvjyQpBfHWpID9rmM1PzN5JYGxvMG7ZRoywku5FPTZowC6Ec6PVVPztM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785896758; c=relaxed/simple; bh=AXNQ1viMm7svRNOOXebhaFtHLDwWM1xxHS74qM7IF/E=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Eg8nRr/u7G9PXkbQonvKipnbQdqdkIDNBz2UePlgYdHkQiEMkSmnnuprinaEegSxlbIZNTZc48JDkhFuQz4LFbRK0mxOeOmys4VuGubkPU04cCSGZJIYZwrCrg6Wtu3Hv8132ZBu/WNpF6GWjn+327I3rpYrVNl56asH4SbHw4Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=i7Oaa7wf; arc=none smtp.client-ip=209.85.215.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="i7Oaa7wf" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-ca97d139d5fso347219a12.0 for ; Tue, 04 Aug 2026 19:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1785896755; x=1786501555; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=gylrXA8dZHEkTigMCwezjCY5gprk9td+R+vUmKVGqHo=; b=i7Oaa7wf0TAJ2kVvgZA1pfogbgsii+kCY3cjMbqe3g/cTlMs55PGWT72wYF58fGQnG n6kL127iWmTSQvzeg5mnbr6kBU2WdGHIDQGOZTJlFfrmSqQsjNXFVHjTqPuyvbsZizYO uYmvlrIARnuodS6w8Z4DLeLEG2n4yhDn5Zy65yxs3vs4PRUrRHLYjEVub0bAnaaSzWwu LamVaShGmxaIULirIxCPA1k49OgKn3Ag3UX2gJ7jfCbtT6feSQAZ/S7czYrD7Icu0VJD 5X+6tEzK1+OHHRNRBiMHatX8uB+Z3PjuPV7VDdbMXVSwrbRNqX6qxL5HcOCoAzPuPFeP gXoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785896755; x=1786501555; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gylrXA8dZHEkTigMCwezjCY5gprk9td+R+vUmKVGqHo=; b=gvU4XWpiGwGRf/Eq0GhiuKBR4CzhopkV+Bgivvw8HYnkWrBacNv+8TnEsIUt+8QgK/ wjYNixmQcC5O6JtTP9KsjP0OxV295N55NuWfL2S1+ZZKPE5VGG2PwmCUrWaTQYgfkiwt 0aGETx9hVK2xqGQY7Anwvnd+y8wMSfJKHp6FIlqtpBuIVAGrMRRs3TAtUSf6GnHO1Gig wqQyba8JAsI0S26LMI1pnvkSyvShpAAosPDkBkTPyEI0QUdalCMWLpxWwiRfveGx7JlT lIB+K6TnTk1Dm6Lo6EoGE5GJxqM0biemUK+bvgix5wR4Fu51vaoYAgqwarWN3WWBMXhl /v7g== X-Forwarded-Encrypted: i=1; AHgh+Rpo0gBHsEyj7vP0REEOo+ul80xTK1u7KtIzXgEIFJmAjiCdrvccM8iRX0W0+UTlIpBOzKJJx1YsqY+maG0=@vger.kernel.org X-Gm-Message-State: AOJu0YyYSh3jGebO9L4Asg2Pe2xlZNRqngN5ZoV64fq1dlikf3hd6O7I u6hZyPj8PD53CvyK6ZSIqZdXz8ZVfZJTqB37N5YacETF6FHoY+3BXMBQ5vH6Sh8iTG8= X-Gm-Gg: AR+sD12N5LSK2RMxlpw8xEFEnUpcQXZqvzvcdC+1Smy3HxSgd78vzg4xBBU8giPvEx9 7nLklutKg7FrEAPq/Ozl1LbpZNbOQ2WyS6hBYxqs2u0CHkSfUSRsQkO/N3Miz+0V0LspiEmMB2o zCEyPf7XbhWU8AnYpUUiqG2JB3n7aKCE0UZs+MA1oKzkdcGwkYgMnsKMiFahN3E1Pnt/7/xAfEe F9C+IX07SZSvox4sQtvk+I0ZaZczRU3vQVyv9z9JKMu0MId1KKcyzcecX2ySH9DCgLVVnVcniA4 EXc+uFuE3/VEIn7fJwgfZ4OuD3OYlP+VuQmuFLkXA2Q5GsYKzpOuIwitPCfGUbbAJy7gcRA/3ne mIlbcGSD9wE6MJ4hAoEjcVVuPmPoct0SH1ldBbaU4LiP7oZ7/PK7gpP5oAB7u/Bzc3E9Hd6lNOk IbYNdRSEr8H0ygTeR18DmXOr/AiJp5x/EhuUoHGazZhvkHT87pNRQRhRD70jqKIkOGL3MN7+1OU qQKn8VgoQ== X-Received: by 2002:a05:6a00:1821:b0:84f:21ba:54e9 with SMTP id d2e1a72fcca58-84f2e0dbe2cmr3481771b3a.38.1785896755037; Tue, 04 Aug 2026 19:25:55 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.102]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84f2e52e28fsm337769b3a.53.2026.08.04.19.25.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Aug 2026 19:25:54 -0700 (PDT) From: Muchun Song To: Andrew Morton , David Hildenbrand , linux-mm@kvack.org Cc: Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-kernel@vger.kernel.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2] mm/sparse: keep mem_section_usage_size() internal Date: Wed, 5 Aug 2026 10:25:36 +0800 Message-ID: <20260805022536.1206575-1-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit mem_section_usage_size() is only needed by sparsemem implementation code after commit ae751d567baa ("mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO"), so keeping the declaration in mmzone.h now exposes the helper to all mmzone.h users for no reason. Move the helper to sparse.h so sparse.c and sparse-vmemmap.c can share it through the internal header. While doing so, calculate the allocation size with struct_size_t(), which ties the expression to the pageblock_flags trailing array instead of open-coding the struct header plus bitmap size. Signed-off-by: Muchun Song --- v2: - Mention that ae751d567baa removed the last external user (David) - Use struct_size_t() for the mem_section_usage size calculation (David) --- include/linux/mmzone.h | 1 - mm/sparse.c | 10 ---------- mm/sparse.h | 6 ++++++ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a26c8b855222..86891163e0ef 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -2070,7 +2070,6 @@ static inline struct mem_section *__nr_to_section(unsigned long nr) #endif return &mem_section[root][nr & SECTION_ROOT_MASK]; } -extern size_t mem_section_usage_size(void); /* * We use the lower bits of the mem_map pointer to store a little bit of diff --git a/mm/sparse.c b/mm/sparse.c index 704a9dec2b9a..46458e5300e2 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -213,16 +213,6 @@ static void __init memblocks_present(void) memory_present(nid, start, end); } -static unsigned long usemap_size(void) -{ - return BITS_TO_LONGS(SECTION_BLOCKFLAGS_BITS) * sizeof(unsigned long); -} - -size_t mem_section_usage_size(void) -{ - return sizeof(struct mem_section_usage) + usemap_size(); -} - #ifdef CONFIG_SPARSEMEM_VMEMMAP unsigned long __init section_map_size(void) { diff --git a/mm/sparse.h b/mm/sparse.h index 95aa031213f2..3b744667a7e6 100644 --- a/mm/sparse.h +++ b/mm/sparse.h @@ -47,6 +47,12 @@ static inline void __section_mark_present(struct mem_section *ms, ms->section_mem_map |= SECTION_MARKED_PRESENT; } + +static inline size_t mem_section_usage_size(void) +{ + return struct_size_t(struct mem_section_usage, pageblock_flags, + BITS_TO_LONGS(SECTION_BLOCKFLAGS_BITS)); +} #else static inline void sparse_init(void) {} #endif /* CONFIG_SPARSEMEM */ -- 2.54.0