From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pz2-f38.google.com (mail-pz2-f38.google.com [74.125.228.38]) (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 1A23B35E1A3 for ; Thu, 24 Sep 2026 07:58:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.38 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236690; cv=none; b=hwoB1FqKjQZavsPnV/Dd1Wtn160aI+yt9SrY33xVmxwdtIPPm3I/SWSqAODJcquoMXvhh+/NcTgMWO1yYSUKBJjVbnRYn4xXD9fA6TRls8mPJ5wi4r40CguxBfUNhwD0wUXhZC9sOs1scMRfSWkdUURyeByDO6ntvhQe8fDEVak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236690; c=relaxed/simple; bh=k6yeCVy0cj0GF6ydp+5PgspzHyNJVNAnaJw0u9cih4Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sK07yCzoiBwZxrB8JLuc78QPCwPSbbeozKgpHmj/kORxaNe7ycd9Ng2hEjUCm0/h4bKFKfhqF2QN27fJAYLMueE3tToPfvOex2b7/RDna/tLgJFi95YC4uuRfJsaqB0CfE9gr4hbBTBn1fW3iTm4Cu1YGpwbD9XTXMCRDUGsnJU= 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=JKLkfxqk; arc=none smtp.client-ip=74.125.228.38 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="JKLkfxqk" Received: by mail-pz2-f38.google.com with SMTP id 41be03b00d2f7-cc1cea4c7a0so985613a12.1 for ; Thu, 24 Sep 2026 00:58:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236687; x=1790841487; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VgA5dgb5izhCu2j+FaX7Ht7UUGMfz5OynkoaMbINRFs=; b=JKLkfxqkhPev4r+7If2XILAkvT++n535ampCGYY0WdaCXP2wOKAWeVJ9mIRTDxaZry Apul5T/xFMFbrLBDUzJvrdxfNbR5xfjbGACD/fD0MRz2G9kxblkhDOi4kOD478LyvnN4 sia2yb3fPigclHcqFVSD8jHHaOYR0jTp8E4uFYuWcIAKPHtzuegc+3w9xDmSBjvmQpux i4nmF7CIDjTvcCcP85PaX3aceGYClx6Iew7+AxgWZIhaWh4RlYY6HB/S6qAS5gzTDNYn A0KtKG7LMoaqZ6xl2Xuc+CHLj/Zg3S/q3KE760lT3HDMLYJSLoHBFerqkTwS5SyxbaFY OlLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236687; x=1790841487; h=content-transfer-encoding:mime-version:references:in-reply-to :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=VgA5dgb5izhCu2j+FaX7Ht7UUGMfz5OynkoaMbINRFs=; b=dV/9FhHj06KaKLrGtAaAxvKDhi9syHWfS+ODSsLKuA4HbTPvnIQBX/IlGrJlE75Nel mzgXuTAZSYX2iD7ZvsGWCj+6PuqCxXLhEwsXsxtUBHa+lQUCyPnQORhSojMKAmuDvQxS FEuRTgWIbNbbdOnn2C7dW7IRb24ag6iNRCNMjfcq3g4ynt7sllZxlnEHaHz06VMJOYt3 QLnRcTdsWopn2U/DQpuNhzHQJeWgp/5k5JtDWfLw9feaKyIH2WrEGj6oAG5q32AZFvlz fHYjCWdGO34CugatpBNeCx+C9u+rTKI+DpfwZXeFv3e+ZTPg4Kzd4jDd0By6JWey0PLq LPHg== X-Forwarded-Encrypted: i=1; AKwUvBwj3XE6B5cEK/FrpvEvwHXp3Zz7ZaFgwzrLqASXDxMhtLOGtOrIfq1yOD5HluDNB7l8lClQ0D3MFP8L/Xo=@vger.kernel.org X-Gm-Message-State: AFuF++mqCpFGj+0PRYEZJjBfNXO92C6VHNVEVp0SRiF2+I5Coa2WeqkD xvlxHEiPrl2xxUJRihO/7J2NKSzmLvvK2P16gs/z3PGjtdiKPU3a8DeGxCVnVHTvUzo= X-Gm-Gg: AYBFou0A/TS3zxBdJfiQWcyHGt9dXQv60IUpLN33St0lEcFDPBEmY/AmnYk8/skdE39 XLRA15rhPMBIkrTvbdSicOhH71nzJG/l3Lp6galuwBvIf0t1Qp+TTW0Hk6ave20ndJAjifKu2j4 Kr/vUTrmCjfCx5ZMn3Db7dWMJNAUV1cZ17X46vxgCkg9eGUxYfQwWfuvYswcFEbhtLWJgQ53RU5 iXT39f+PX54YWKpRGFbfAzPKxc00t1oqOPUfN+wUILtZJPXjAfMNvi4KItiG38h2BQ5YVCfMcQ0 0QEXHcbTxN7XRNFxRjxW9wlY2i2WIRngHRMdEL/2+oqNiJI+8LGp2/Sf+2iLKXQtnG5xAB37h06 Zxlf/o4n4wsZjVj1wY9b6dsS5KwDKX6SlfNTP+FAJJlzC3CaPtrBuuJpJpwsNhY6x//8pZw6iUk fuHjxifpZYPsnM8NeRX8m9JE4BlGtJHwX2IdAad0YpEylLnKPLIzE2j0yAb0raQpsieytrClEZH taD+kgU6Cv+7beIsLH4W93Fd08e+Q== X-Received: by 2002:a17:90b:4d07:b0:39d:fcbe:fdcf with SMTP id 98e67ed59e1d1-3a0985700c8mr1539659a91.1.1790236686989; Thu, 24 Sep 2026 00:58:06 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:06 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 1/6] mm/sparse-vmemmap: drop VMEMMAP_POPULATE_DAX Date: Thu, 24 Sep 2026 15:52:54 +0800 Message-ID: <20260924075259.2013039-2-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" VMEMMAP_POPULATE_DAX currently distinguishes DAX vmemmap population in two places: it keeps allocations on the normal path and takes a reference when a backing page is supplied for reuse. After Device DAX switched to the common per-zone shared tail page, both conditions can be determined locally. DAX supplies ptpfn for every shared tail mapping and requests an allocation only for compound head mappings, whose PFNs are not optimizable. Therefore, vmemmap_optimizable_pfn() alone selects the correct allocation path. When ptpfn is supplied, the caller is reusing an existing backing page. Once the slab allocator is available, take a reference for each reused mapping to balance the release performed by vmemmap_free(). Although the buddy allocator is available before slab, no vmemmap population occurs in that interval. Earlier mappings are backed by memblock/reserved memory and do not need page reference accounting. Remove VMEMMAP_POPULATE_DAX and the flags argument from the vmemmap population helpers. Signed-off-by: Muchun Song Acked-by: Qi Zheng --- v2: - Explain why the buddy-to-slab initialization gap is safe (suggested by Qi Zheng) - Collect Acked-by from Qi Zheng --- mm/sparse-vmemmap.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 3267f9362c68..919c94a36346 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -32,12 +32,6 @@ #include #include =20 -/* - * Flags for vmemmap_populate_range and friends. - */ -/* Vmemmap population for ZONE_DEVICE compound pages */ -#define VMEMMAP_POPULATE_DAX 0x0001 - #include "internal.h" #include "mm_init.h" #include "sparse.h" @@ -208,7 +202,7 @@ struct page __ref *vmemmap_shared_tail_page(unsigned in= t order, struct zone *zon } =20 static __meminit void *vmemmap_alloc_pte(unsigned long pfn, int node, - struct vmem_altmap *altmap, unsigned long flags) + struct vmem_altmap *altmap) { struct zone *zone; struct page *page; @@ -218,7 +212,7 @@ static __meminit void *vmemmap_alloc_pte(unsigned long = pfn, int node, * Device DAX still relies on vmemmap_populate_compound_pages() for * head/first-tail allocation and tail-page reuse. */ - if (!vmemmap_optimizable_pfn(pfn) || flags & VMEMMAP_POPULATE_DAX) + if (!vmemmap_optimizable_pfn(pfn)) return vmemmap_alloc_block_buf(PAGE_SIZE, node, altmap); =20 zone =3D pfn_to_zone(pfn, node); @@ -230,8 +224,7 @@ static __meminit void *vmemmap_alloc_pte(unsigned long = pfn, int node, } =20 static pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long ad= dr, int node, - struct vmem_altmap *altmap, - unsigned long ptpfn, unsigned long flags) + struct vmem_altmap *altmap, unsigned long ptpfn) { pte_t *pte =3D pte_offset_kernel(pmd, addr); unsigned long pfn =3D page_to_pfn((struct page *)addr); @@ -240,7 +233,7 @@ static pte_t * __meminit vmemmap_pte_populate(pmd_t *pm= d, unsigned long addr, in pte_t entry; =20 if (ptpfn =3D=3D (unsigned long)-1) { - void *p =3D vmemmap_alloc_pte(pfn, node, altmap, flags); + void *p =3D vmemmap_alloc_pte(pfn, node, altmap); =20 if (!p) return NULL; @@ -255,7 +248,7 @@ static pte_t * __meminit vmemmap_pte_populate(pmd_t *pm= d, unsigned long addr, in * and through vmemmap_populate_compound_pages() when * slab is available. */ - if (flags & VMEMMAP_POPULATE_DAX) + if (slab_is_available()) get_page(pfn_to_page(ptpfn)); } entry =3D pfn_pte(ptpfn, PAGE_KERNEL); @@ -318,8 +311,7 @@ static pgd_t * __meminit vmemmap_pgd_populate(unsigned = long addr, int node) =20 static pte_t * __meminit vmemmap_populate_address(unsigned long addr, int = node, struct vmem_altmap *altmap, - unsigned long ptpfn, - unsigned long flags) + unsigned long ptpfn) { pgd_t *pgd; p4d_t *p4d; @@ -339,7 +331,7 @@ static pte_t * __meminit vmemmap_populate_address(unsig= ned long addr, int node, pmd =3D vmemmap_pmd_populate(pud, addr, node); if (!pmd) return NULL; - pte =3D vmemmap_pte_populate(pmd, addr, node, altmap, ptpfn, flags); + pte =3D vmemmap_pte_populate(pmd, addr, node, altmap, ptpfn); if (!pte) return NULL; vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); @@ -350,15 +342,14 @@ static pte_t * __meminit vmemmap_populate_address(uns= igned long addr, int node, static int __meminit vmemmap_populate_range(unsigned long start, unsigned long end, int node, struct vmem_altmap *altmap, - unsigned long ptpfn, - unsigned long flags) + unsigned long ptpfn) { unsigned long addr =3D start; pte_t *pte; =20 for (; addr < end; addr +=3D PAGE_SIZE) { pte =3D vmemmap_populate_address(addr, node, altmap, - ptpfn, flags); + ptpfn); if (!pte) return -ENOMEM; } @@ -369,7 +360,7 @@ static int __meminit vmemmap_populate_range(unsigned lo= ng start, int __meminit vmemmap_populate_basepages(unsigned long start, unsigned lon= g end, int node, struct vmem_altmap *altmap) { - return vmemmap_populate_range(start, end, node, altmap, -1, 0); + return vmemmap_populate_range(start, end, node, altmap, -1); } =20 /* @@ -498,7 +489,6 @@ static int __meminit vmemmap_populate_compound_pages(un= signed long start_pfn, unsigned long size, addr; pte_t *pte; int rc; - unsigned long flags =3D VMEMMAP_POPULATE_DAX; struct page *page; unsigned int order =3D pfn_to_section_compound_order(start_pfn); =20 @@ -508,14 +498,14 @@ static int __meminit vmemmap_populate_compound_pages(= unsigned long start_pfn, =20 if (reuse_compound_section(start_pfn, pgmap)) return vmemmap_populate_range(start, end, node, NULL, - page_to_pfn(page), flags); + page_to_pfn(page)); =20 size =3D min(end - start, (1UL << order) * sizeof(struct page)); for (addr =3D start; addr < end; addr +=3D size) { unsigned long next, last =3D addr + size; =20 /* Populate the head page vmemmap page */ - pte =3D vmemmap_populate_address(addr, node, NULL, -1, flags); + pte =3D vmemmap_populate_address(addr, node, NULL, -1); if (!pte) return -ENOMEM; =20 @@ -525,7 +515,7 @@ static int __meminit vmemmap_populate_compound_pages(un= signed long start_pfn, */ next =3D addr + PAGE_SIZE; rc =3D vmemmap_populate_range(next, last, node, NULL, - page_to_pfn(page), flags); + page_to_pfn(page)); if (rc) return -ENOMEM; } --=20 2.54.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pz2-f12.google.com (mail-pz2-f12.google.com [74.125.228.12]) (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 3C9FE40B0FE for ; Thu, 24 Sep 2026 07:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236696; cv=none; b=ohTSF2wgafLKQUJeNuR2GUv5nu6sVO35U+l/B4odd8EMmyZWPfBCPa4aD+/z0kxJXJx9MIQZc8LyGCwaGjgz+QdcRz1O1FjQoRnIGTkYyDX+OOFUWTAwzlXFgWxUZELAPhpdjWaM1VfDrYAcrNZFlHRR+dOpn4A6QujvGVoV7HI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236696; c=relaxed/simple; bh=T84KkTvJYaKvataEAB5oU4K6zrwIT/mCEUvsHRkJx5U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ePrh+spHOHMNk8wSiuBQoWjYRsUwcMXuX4j22PA9z3CunshXsqIPJrAYH16Ul8j43p2IGJFPJVgzxNWu262xqRHujXLbHoQy/jNKrEAObgVZhDZOZB8L3xncFsyMB+fSSY1vV5ZulHsQ1/lpnOXrh9rm1qjf5uLMvXgUHT5Qb0U= 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=JKf88rX0; arc=none smtp.client-ip=74.125.228.12 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="JKf88rX0" Received: by mail-pz2-f12.google.com with SMTP id 41be03b00d2f7-cc4cacd3409so1195613a12.2 for ; Thu, 24 Sep 2026 00:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236693; x=1790841493; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ypgv34u1izH3x2bQ0aB2L9cYWw/W1JF39DJ+G9Ytha0=; b=JKf88rX0fXIzCm8p1v23maA8NCvGSmVbfKY56lc7HThyCoWaAnhEqQbkrjpxLGgL8H ULujok8iWIh3fzOrUig9fnkdFdbMwg9N3lPn5rZyVTH6pWKGJVPz3t6PNCAhX/4bVNBY QGXspepH+6stKSM81JzbrWdjsT+G/OxnQ2x7THWWuNacyDgGiofvJEuqeeGLDRhlKtmU 4vKtwchdH2/Qm+6ccMMvxMD+W2KbJYtFBS6I5vfHIEMbVfCC2A148BRJU9nMr9dEwEpQ tYb+r6kACpHPP+Ko6HfRD2twOtyprPD8Glggs4sy6bUtVzoGsmZ+buWcE76QjvR5p5hR ggNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236693; x=1790841493; h=content-transfer-encoding:mime-version:references:in-reply-to :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=ypgv34u1izH3x2bQ0aB2L9cYWw/W1JF39DJ+G9Ytha0=; b=RLLVuFSwKVAGakduJ3l25ulXVJc34kOAlTt+uQW1Jb4E5k0z/Aim+0kzhNfHfXf6ZJ 8Aj2OJ07MhRidrWLCfnFFgYcoSZqRvdS+6CW0oB3j9JuV0BspDt3lYzz/fse3Cr1Py/G /0cE6nuuJF94PQdxf83GDabSNE85sd2Xm/w9IhtZbHENkwLtCfTJr862GCAr6XcmhY0c Na6JJKQ1aanD/6z3l27iZ4ouPwwXIoBk80TjguOk2LfMRNuVo6xPt7IhjitCPtxwtncH kEaw5fsNwMT9VlPhJxXEm7igNxDtm+mztYfqkp+OPFDARc/YMeHr47JFyVvrDohGL5pH ItxA== X-Forwarded-Encrypted: i=1; AKwUvBzCOIVfyQHlwpYmkZO5V2vzo6LHU2pbqbcfHysFvKfyW2wHxgy0dfaFyl3jebbReduS+UIyX1ZnS1v8oq8=@vger.kernel.org X-Gm-Message-State: AFuF++nJJz9aywO714O7Vjl9EjOC93qWOAO888dpeFn0lF0QQonJd2pT 5cEN9MbT0f6xbwpJcg1cZF++RfaLHyjmhMnqNvFFP2sqaZpza4Vdhm3DETM7Ti/c/oA= X-Gm-Gg: AYBFou3Ms5tt+r9/heVF0ab1VhaUs7W9CtyWfFlJmOwhcB7gh/bSUQdPwYEs94k5Db3 7yoQe9qKVDB1Ys/lt2kIoH4N0FA6RyJfpjSwlf6yrIS1KXS4JgJQwb9ClTcYycBFfbCtvtuLm6O A344uEolfsn30tr7IefC2pSE6Cn/+aWuZmRXIdZRDzZJukuc1j+tNagUq5W2fYNhs7CCyOCVBRM pscvk2q+iAa7iYeXZQEdZYIeZ59N0pmS/IJCrO+EV6nRGb5YLnWNJnXGGzOUy1qdedZmqYscCDX NL5AfRnE2UC5sBPyieSF+BHcNDuU5pg4LkzyCHklwZh1+dtzQA+TRkCOU01uA7ULtDvXTi4my6K Iw7nQREUfVqLo9buy5mVKhRgPSA5Bg+YErsQy5IMq5Dfpzno3+na0RLSFGFIsFT02qtUpD3bpA6 iLzvVOEg/Tn23XpIVnjMXKhEKkLEBibKwJftxcnWBCeAqcvzq4LcMlqk7LDkj+1KaVY0+WhAp8s rg5oprQ0O4B8ZA0YKdb2FLRonixpw== X-Received: by 2002:a17:90b:3852:b0:39d:f024:c7ec with SMTP id 98e67ed59e1d1-3a098d883b8mr1610039a91.16.1790236693438; Thu, 24 Sep 2026 00:58:13 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:12 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 2/6] mm/sparse-vmemmap: support device DAX in common vmemmap path Date: Thu, 24 Sep 2026 15:52:55 +0800 Message-ID: <20260924075259.2013039-3-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The common vmemmap population path cannot yet handle optimized Device DAX mappings on its own. It uses pfn_to_zone() to find the shared tail page, but Device DAX populates its vmemmap at runtime before the ZONE_DEVICE span is initialized. Teach the common path to use device_zone() for runtime optimized vmemmap population while retaining pfn_to_zone() for early boot. This allows the same path to support both early boot mappings and Device DAX. The backing PFN supplied by the Device DAX-specific population path is no longer used, allowing the redundant lookup and population code to be removed later. Signed-off-by: Muchun Song --- v2: - Expand comments around slab initialization to explain zone lookup and page refcounting (suggested by Qi Zheng) --- mm/sparse-vmemmap.c | 56 +++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 919c94a36346..cdcc93714a9a 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -208,18 +208,39 @@ static __meminit void *vmemmap_alloc_pte(unsigned lon= g pfn, int node, struct page *page; const unsigned int order =3D pfn_to_section_compound_order(pfn); =20 - /* - * Device DAX still relies on vmemmap_populate_compound_pages() for - * head/first-tail allocation and tail-page reuse. - */ if (!vmemmap_optimizable_pfn(pfn)) return vmemmap_alloc_block_buf(PAGE_SIZE, node, altmap); =20 - zone =3D pfn_to_zone(pfn, node); + /* + * Before slab is available, vmemmap optimization is used for early + * system RAM, whose zone can be determined from the PFN. + * + * Once slab is available, only ZONE_DEVICE memory reaches this + * optimized population path. Its zone span has not been initialized + * while its vmemmap is being populated, so pfn_to_zone() cannot be + * used. Obtain ZONE_DEVICE directly from the node instead. + */ + zone =3D slab_is_available() ? device_zone(node) : pfn_to_zone(pfn, node); page =3D vmemmap_shared_tail_page(order, zone); if (!page) return NULL; =20 + /* + * During early vmemmap population, the shared tail vmemmap backing + * page is allocated from memblock before its struct page can safely + * participate in page refcounting. Therefore, no reference can be + * held for each shared PTE mapping, and the mappings must be unshared + * before the vmemmap is depopulated. + * + * Once slab is available, the shared backing page is allocated from + * the buddy allocator and can be refcounted. Hold one reference for + * each shared PTE mapping. The architecture vmemmap teardown drops + * the reference through __free_pages() when removing the mapping, + * preventing the backing page from being freed while it is shared. + */ + if (slab_is_available()) + get_page(page); + return page_address(page); } =20 @@ -231,27 +252,12 @@ static pte_t * __meminit vmemmap_pte_populate(pmd_t *= pmd, unsigned long addr, in =20 if (pte_none(ptep_get(pte))) { pte_t entry; + void *p =3D vmemmap_alloc_pte(pfn, node, altmap); =20 - if (ptpfn =3D=3D (unsigned long)-1) { - void *p =3D vmemmap_alloc_pte(pfn, node, altmap); - - if (!p) - return NULL; - ptpfn =3D PHYS_PFN(__pa(p)); - } else { - /* - * When a PTE/PMD entry is freed from the init_mm - * there's a free_pages() call to this page allocated - * above. Thus this get_page() is paired with the - * put_page_testzero() on the freeing path. - * This can only called by certain ZONE_DEVICE path, - * and through vmemmap_populate_compound_pages() when - * slab is available. - */ - if (slab_is_available()) - get_page(pfn_to_page(ptpfn)); - } - entry =3D pfn_pte(ptpfn, PAGE_KERNEL); + if (!p) + return NULL; + + entry =3D pfn_pte(PHYS_PFN(__pa(p)), PAGE_KERNEL); set_pte_at(&init_mm, addr, pte, entry); } else if (WARN_ON_ONCE(vmemmap_optimizable_pfn(pfn))) return NULL; --=20 2.54.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 4446C43DECB for ; Thu, 24 Sep 2026 07:58:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236700; cv=none; b=jucpOgVFVg5taEVSWez92NGqIbVyHZ6oXJKYFwnmNvD1qaeChUZ7JSKR3TSsPbMxjhQUGRsMwe6sN2jp7NHUOWPM5dmDbjTXmT38NZnoburqKEnf3kYfsNQKB6uGByPADJjNg9shdFZwUo5jPSJDyh/ok8HvGG8zO8TNUzJB/O8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236700; c=relaxed/simple; bh=0ThW2qM7vNvfW83kXIKzDXebm6IN+qEzu5zDI2USEj4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VgbC3iE77h3xNFguF1Gn1mtn9EnhkorFM4GDnC1PddVdiFKmIKV06xcsUNuAtXTznfz/Ls80AnV07r/7WdDXKIeIkUXpPATsPldRi84WSu8kUPX9GVz5c9IwFj/9BhET2rkwhM03k9GKqw1UumUTU2aKleJ1zFDIqdY4YXu4SCY= 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=DaCMFozC; arc=none smtp.client-ip=74.125.227.140 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="DaCMFozC" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-396ccd5cf02so984265a91.3 for ; Thu, 24 Sep 2026 00:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236698; x=1790841498; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Mwg8qfU0YRGSE8UK0HBy9iZTs3Sk7OFpk3Nxuz+XYco=; b=DaCMFozCHkCj8pQ/l9CXDt1v+W3REdaud2JOeRF5lVkoXQ9m+AqNKZSBnNgJXJCfRe rmqNgEkLdWpH9N0UOZy5jBbOBWXqhcG+I3gExSnvuFxCx/2tLjcpnkdxAzT9L2BZvI2t R7vn9Vw2U+EDRU/HRF+oiBYXDaxWhwvlHbLWSs3Qol+ElEhdi35hAICzcCsi3YuYX/1L v9dznS4bYe7z7QmUsquVkRgpmKy9vANyB3UvH6SM82EJyBXvfPYyKAFyZiFvqU0I5El8 rWA/QrIpvMJVvhHbgP4KAHWQfDJzm/qWSIUyNPaIuGldrs8FihTlr+KtL4Tz5uDRTdBQ rZCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236698; x=1790841498; h=content-transfer-encoding:mime-version:references:in-reply-to :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=Mwg8qfU0YRGSE8UK0HBy9iZTs3Sk7OFpk3Nxuz+XYco=; b=OgckMm+nkZYuKGffGt0AWW6AjNCwvNN9sWjJ4btQj703L51jBwwQJacfiKDnLUZTe4 KqmgXwq+euBUdRfCTb+2En+e5x4OVHSCpbV5G7LIIkF7npkzHJY4U4T5eukDJLThvcL0 iExoSeR8V6lNsSx9X61rQ9o5WwAscj75lJBqZDQl6Uq1JWJOB3VwqrlFeJxUa23RMOa0 yHf/EaTc/nrnefsdIl7qC+tvHx4HHoUXZR46+22IqsHTqABjSYcErWmTt6pzxOty+5ld d+j/dIzkSShUE7LFyRWvi5aMNdlLMUzjc4pXRyMNTgrdsJgCk9fOUXWTqe2Cryv/q/j4 ScIA== X-Forwarded-Encrypted: i=1; AKwUvBxBxhqXqKv4IdjejB/wmLD32WMxLGArkyCDXFxdAUmfRLR0itaaTwvkA2TfwIKB3B1t4mgJhyZCqIrLK0g=@vger.kernel.org X-Gm-Message-State: AFuF++nWPqqENFNEQ8RFtbsPA1a33EkiHv84RaEOc5p7qHMlL+pL54AY aGaP6bYne462QTeUttFbYo7vJj9XxDlrHxKbgmetjPXAbePzFzkYvr/A0Ek8Ga21L8Y= X-Gm-Gg: AYBFou2JrtFIqkwULfEf+Q1nVcFX3OTZ6m0P0e8vqcjJuiGQ3uHnH2Kx87WDuTDAeBi oRP/6L+8UbgQepgznWm5EZpEaUm13NmgaY2NN0CNc2YrwQ0wqVK+1ufc3IVjarRULcD63TLjxuW qlDJj4SBNB3ERLg+0mwbVuqN4ALdwrHA4Cs8HoVRr271vQ6xnUjCZ0avuD68Z5Us4aJx+1xP4wQ nge92vondzYz9Lp8nwHxE131P3+214Cz6ZlCYYpltyV8n/OPbgcP5d+WascVEGIzQpNfXIyilZ9 CliY30bk3L8tRGW27vgctHimlxnut7yp7ajwOD0sNbNtUoejhdd6YC87KeuRxJ6Ku6emqTIGeQq OqIVFAG4LMGYmovdqSedsF8Mcps2SoKfiguXiTC1CWiX5pZptHaYbc8Yk4mf0cGOlxtSxTkKiF1 SK7k06AvkdON46N0RxX+/QvcKlKuwByu0UC2PEIMW19pRk/LqLEbBBsL9c4+e6/kZ39frhZmyjJ ChdG8Wk/6UdWeqJPcUX X-Received: by 2002:a17:90b:4e8f:b0:39e:4c80:f67c with SMTP id 98e67ed59e1d1-3a09875f8f6mr1584809a91.27.1790236698392; Thu, 24 Sep 2026 00:58:18 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:17 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 3/6] mm/sparse-vmemmap: drop Device DAX-specific population path Date: Thu, 24 Sep 2026 15:52:56 +0800 Message-ID: <20260924075259.2013039-4-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The common vmemmap path selects the shared page for optimized mappings itself, so Device DAX no longer needs vmemmap_populate_compound_pages() to find a shared tail page and pass its backing PFN through the generic population helpers. Remove the Device DAX-specific population path and let section memmap population always use vmemmap_populate(). The powerpc retains an architecture-specific compound-page implementation, so select it directly from radix__vmemmap_populate() for optimizable sections. Signed-off-by: Muchun Song Acked-by: Qi Zheng --- v2: - Collect Acked-by from Qi Zheng --- arch/powerpc/mm/book3s64/radix_pgtable.c | 3 + mm/mm_init.c | 2 +- mm/sparse-vmemmap.c | 71 +----------------------- 3 files changed, 5 insertions(+), 71 deletions(-) diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/boo= k3s64/radix_pgtable.c index 9ca28e4a610a..cb72d9ccf747 100644 --- a/arch/powerpc/mm/book3s64/radix_pgtable.c +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c @@ -1122,7 +1122,10 @@ int __meminit radix__vmemmap_populate(unsigned long = start, unsigned long end, in pud_t *pud; pmd_t *pmd; pte_t *pte; + unsigned long pfn =3D page_to_pfn((struct page *)start); =20 + if (section_vmemmap_optimizable(__pfn_to_section(pfn))) + return vmemmap_populate_compound_pages(pfn, start, end, node, NULL); /* * If altmap is present, Make sure we align the start vmemmap addr * to PAGE_SIZE so that we calculate the correct start_pfn in diff --git a/mm/mm_init.c b/mm/mm_init.c index 56bb4567a494..1650d6bc1211 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -1046,7 +1046,7 @@ static void zone_device_page_init_from_template(struc= t page *page, * initialize is a lot smaller that the total amount of struct pages being * mapped. This is a paired / mild layering violation with explicit knowle= dge * of how the sparse_vmemmap internals handle compound pages in the lack - * of an altmap. See vmemmap_populate_compound_pages(). + * of an altmap. */ static inline unsigned long compound_nr_pages(unsigned long pfn, struct dev_pagemap *pgmap) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index cdcc93714a9a..4aae22beca21 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -466,71 +466,6 @@ int __meminit vmemmap_populate_hugepages(unsigned long= start, unsigned long end, return 0; } =20 -#ifndef vmemmap_populate_compound_pages -/* - * For compound pages bigger than section size (e.g. x86 1G compound - * pages with 2M subsection size) fill the rest of sections as tail - * pages. - * - * Note that memremap_pages() resets @nr_range value and will increment - * it after each range successful onlining. Thus the value or @nr_range - * at section memmap populate corresponds to the in-progress range - * being onlined here. - */ -static bool __meminit reuse_compound_section(unsigned long start_pfn, - struct dev_pagemap *pgmap) -{ - unsigned long nr_pages =3D pgmap_vmemmap_nr(pgmap); - unsigned long offset =3D start_pfn - - PHYS_PFN(pgmap->ranges[pgmap->nr_range].start); - - return !IS_ALIGNED(offset, nr_pages) && nr_pages > PAGES_PER_SUBSECTION; -} - -static int __meminit vmemmap_populate_compound_pages(unsigned long start_p= fn, - unsigned long start, - unsigned long end, int node, - struct dev_pagemap *pgmap) -{ - unsigned long size, addr; - pte_t *pte; - int rc; - struct page *page; - unsigned int order =3D pfn_to_section_compound_order(start_pfn); - - page =3D vmemmap_shared_tail_page(order, device_zone(node)); - if (!page) - return -ENOMEM; - - if (reuse_compound_section(start_pfn, pgmap)) - return vmemmap_populate_range(start, end, node, NULL, - page_to_pfn(page)); - - size =3D min(end - start, (1UL << order) * sizeof(struct page)); - for (addr =3D start; addr < end; addr +=3D size) { - unsigned long next, last =3D addr + size; - - /* Populate the head page vmemmap page */ - pte =3D vmemmap_populate_address(addr, node, NULL, -1); - if (!pte) - return -ENOMEM; - - /* - * Reuse the shared page for the rest of tail pages - * See layout diagram in Documentation/mm/vmemmap_dedup.rst - */ - next =3D addr + PAGE_SIZE; - rc =3D vmemmap_populate_range(next, last, node, NULL, - page_to_pfn(page)); - if (rc) - return -ENOMEM; - } - - return 0; -} - -#endif - struct page * __meminit __populate_section_memmap(unsigned long pfn, unsigned long nr_pages, int nid, struct vmem_altmap *altmap, struct dev_pagemap *pgmap) @@ -543,11 +478,7 @@ struct page * __meminit __populate_section_memmap(unsi= gned long pfn, !IS_ALIGNED(nr_pages, PAGES_PER_SUBSECTION))) return NULL; =20 - if (pgmap && section_vmemmap_optimizable(__pfn_to_section(pfn))) - r =3D vmemmap_populate_compound_pages(pfn, start, end, nid, pgmap); - else - r =3D vmemmap_populate(start, end, nid, altmap); - + r =3D vmemmap_populate(start, end, nid, altmap); if (r < 0) return NULL; =20 --=20 2.54.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (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 4E47770830 for ; Thu, 24 Sep 2026 07:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236706; cv=none; b=IugeZrGG43Z2vBlrIY2JxieKAJD8AngMAav7CRR94TnDghTd2yHlb4Vk4b6h7SaIvzcSC7qtluPPLBN8oKwRvNWz7T7qi+t2KHxACPT8pYVAT9KqcdRHj5FP5q/JpDg58qrSiShgZuxiC1RioKCsAcDSgTdwCk7RipZtSu5Xmyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236706; c=relaxed/simple; bh=PiGnJMNyBjTVcRCDpm+MFKfL7YehhRKtCMkb9T496h8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g6jC3mU4xIuyH3Xur0BZEZ50Q/ZbJLmVVJL77PHWGUaqciqF6C0vGUvcwcJ+0B1ff9q/4KyLxMxB+jAKO80vZ7F0JEWFatHWIpZYeCIq6w3To0GJREQXk8UgNcQnS5Sjv8Qntgx/EpSLku1pflgxnNBvTb/yEKuPwS4L2rLfsC8= 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=HErrwnBU; arc=none smtp.client-ip=74.125.227.141 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="HErrwnBU" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-39b31b4281eso1284262a91.2 for ; Thu, 24 Sep 2026 00:58:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236704; x=1790841504; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vIuII5z6VGpIszxqYOaYyPM2+uByFb+jC50FCk2K+v0=; b=HErrwnBUHLVQX41x5Rnpyz61mTtp36cb4P+6iAcs8QXSwnIoskEKSabDUfn2u5489i oxzmQz4FRcwTqDwYz7oLXvUyCdTbrDswVWjVpNZuseqy6Kz8wmnlkMpoG4iJribqrl1l tcKXimWJYOkpvNKUW9LJP1mI4Z4zZe/VgX+fkrzueWaZM6YqXs0EgjgcNsKLeG243F6e piP3BsT1U7XUGjmcSlO9C5SF1vpGxNrJBdq3H23RzMm5wiKxpVgOlooFGnQDsTbkUpis cIyxe3bG9ziqMyPkGF2VGGNbuYtDZiSklZITLfXFroKSqf3O7a0ONFmpyw3GikXsLhGD Vybw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236704; x=1790841504; h=content-transfer-encoding:mime-version:references:in-reply-to :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=vIuII5z6VGpIszxqYOaYyPM2+uByFb+jC50FCk2K+v0=; b=tf46yz61OQ3ZdNDtEsvSAE7q/j61kxX3Ta0rs2rt30WsbADcFXg1sQClvYy45hYplO ExSxP3EzVjf/GO7F3KhFjvD9l7DKtFYvajS58dnnMatG+tcAEssdfR+c3eZ91cJitYMt RG3zkf3dDNPqfRwG4l06va3U7RUV6WZ3VWXBiQibuai5hQiW1sVlIqwJd5LOhk/bMa5K X0VNCcziT0EfXdF3cjaKbdpt7K94h9lJiAvAozC4Z8FIdeh50tVl/jFUNEp4/JQuypbl Q8h2UDlc7mOXvRR9WdTDk9kbTRcXd++8zfn3vNfP973oCntSKjgCfIrNmWVda/CsSbrH CExA== X-Forwarded-Encrypted: i=1; AKwUvBzXO4NFkp7JJxVsDiFAABshZpubxXWaFASrYq/BNcsQa+5FtXG/Cb6QDhtWPea2IMS7bF0CdvjZ5ticdks=@vger.kernel.org X-Gm-Message-State: AFuF++nBENwpB3tRnTU/t0fZ+PJJouKTq8/TZoPHAFxjE/Ocd6aAL7Dp L0bcRgtBQUzxDZbRdhVyOqJup3SSO/cD5/t22GNHhwbLjbiOSWDwv+dKbiPHXycoJa0= X-Gm-Gg: AYBFou3q4imaGnqbWQ/hTGrT11Rkm5Tw/re7UnCLGeb187lFIS/TPuCTWN0DAgQJYlW IqItV/KdP8da6ROnjcpbiAvO2/gLpl5XbHMf2y/CYV+omif9l9Qu8TCc+i4d8yw1mA/NWU2L+o0 BRbCdsD4QXaOw2mgOIkLpuHYurM9O3Ovqsel/Em0ec9NHxOUrpvjdse8mVzKqRtqUER9fZiuhmE MpP4SWPhQYTbjV7lpvGWk4zWsgGEExuuBYa6LxcnYpNmSRhly+tp2frcdtgKaN6h687gpnAGeCL l43vDRs7fhF29xGFrL3J2fP+ZzY7rbN3I6GrO6FJ0vdRPypRn8TAOjldT52O1mMBnRxhYCf4Ztu B6q9fI334p41jyUMAkbTMR9ispu1PTcx0C2XU0sB+aSK5oNgDF1EQTJ/H1d/97me3xZqPB78ZBb MtWyjW5rD4mrVIhNLyBT8kEyHH2XYup1pGvTq8hbsEd2bp7F0EeSQ5PJfKCNjs6BRAwbrXpxAwv NFkHTuwG+7cT+o714nA X-Received: by 2002:a17:90a:e7ce:b0:3a0:2662:815a with SMTP id 98e67ed59e1d1-3a098db8c10mr1546074a91.43.1790236703641; Thu, 24 Sep 2026 00:58:23 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:23 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 4/6] mm/sparse-vmemmap: remove the unused ptpfn argument Date: Thu, 24 Sep 2026 15:52:57 +0800 Message-ID: <20260924075259.2013039-5-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" vmemmap_pte_populate() no longer uses ptpfn as an input. Drop the argument to simplify the code. Signed-off-by: Muchun Song Acked-by: Qi Zheng --- v2: - Collect Acked-by from Qi Zheng --- mm/sparse-vmemmap.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 4aae22beca21..a5b47e496322 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -245,7 +245,7 @@ static __meminit void *vmemmap_alloc_pte(unsigned long = pfn, int node, } =20 static pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long ad= dr, int node, - struct vmem_altmap *altmap, unsigned long ptpfn) + struct vmem_altmap *altmap) { pte_t *pte =3D pte_offset_kernel(pmd, addr); unsigned long pfn =3D page_to_pfn((struct page *)addr); @@ -316,8 +316,7 @@ static pgd_t * __meminit vmemmap_pgd_populate(unsigned = long addr, int node) } =20 static pte_t * __meminit vmemmap_populate_address(unsigned long addr, int = node, - struct vmem_altmap *altmap, - unsigned long ptpfn) + struct vmem_altmap *altmap) { pgd_t *pgd; p4d_t *p4d; @@ -337,7 +336,7 @@ static pte_t * __meminit vmemmap_populate_address(unsig= ned long addr, int node, pmd =3D vmemmap_pmd_populate(pud, addr, node); if (!pmd) return NULL; - pte =3D vmemmap_pte_populate(pmd, addr, node, altmap, ptpfn); + pte =3D vmemmap_pte_populate(pmd, addr, node, altmap); if (!pte) return NULL; vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); @@ -347,15 +346,13 @@ static pte_t * __meminit vmemmap_populate_address(uns= igned long addr, int node, =20 static int __meminit vmemmap_populate_range(unsigned long start, unsigned long end, int node, - struct vmem_altmap *altmap, - unsigned long ptpfn) + struct vmem_altmap *altmap) { unsigned long addr =3D start; pte_t *pte; =20 for (; addr < end; addr +=3D PAGE_SIZE) { - pte =3D vmemmap_populate_address(addr, node, altmap, - ptpfn); + pte =3D vmemmap_populate_address(addr, node, altmap); if (!pte) return -ENOMEM; } @@ -366,7 +363,7 @@ static int __meminit vmemmap_populate_range(unsigned lo= ng start, int __meminit vmemmap_populate_basepages(unsigned long start, unsigned lon= g end, int node, struct vmem_altmap *altmap) { - return vmemmap_populate_range(start, end, node, altmap, -1); + return vmemmap_populate_range(start, end, node, altmap); } =20 /* --=20 2.54.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pz2-f12.google.com (mail-pz2-f12.google.com [74.125.228.12]) (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 575C63D0919 for ; Thu, 24 Sep 2026 07:58:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236711; cv=none; b=NDMpDRiPNyQjIozLjnDh3coxge9uMuzDURJG5jQIwfwPnpIKlAeO9Yvbcy0IYJg1/pI5K5WXtyFmtv6JZdSjg4zuHGgFk5XEAtG06/bxo6dNh9FqeWNc1mvVW8FnH0JUH9aabgQU/BcOvsutTe9YZ3Raup31y08qR8XBj9DdqeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236711; c=relaxed/simple; bh=w9n4ef3NCBXWc1DpGUKI/TCXbHtusJ1IfeRhwnKuQ5Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kn7W7yrELRSA/8LK8WZHt/x0lMRlmH2qYFrCo6t/6xA2XANoZnYsCf1X/xiX+6BfR5hw+iL8yX54k1bPsG78D6mkw5BKAg9B3Uk/yuAXMgZVJb1rrJ9FJR6mu/ahr13x1jLkWzbLc9PvoHTR65uukO/KFw4a5d3tzEuHpKzrjus= 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=apwa4PMP; arc=none smtp.client-ip=74.125.228.12 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="apwa4PMP" Received: by mail-pz2-f12.google.com with SMTP id 41be03b00d2f7-cc1cebad4aeso876016a12.2 for ; Thu, 24 Sep 2026 00:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236708; x=1790841508; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=olGfWlX6xVbhFK+fX2D0BitKwIFHB7YuSmffyiYh0rE=; b=apwa4PMPQX9k0r1KdrWPu3LCz134Nn2yDQwy6alClA00EGhKo6WxOqNi0O9Qh1rCQY mytFoZI9/myBYWAZtpVkwbGL1BOvzLQ6N1wsMfuBRC5qXTWDjoLsbfWLCjplXP31YDuZ noDxXwNEyWalZ1iB4XTaop5miJvZzN74E4ryk3SUfkhkS4/wnHwP9Lvt2PRcSBWdepqu Svw8Q2ejrFBqW/81nnlmq/IQKNxP2We3Hb84jMO/QSuqLXsVTGvQKcdG0qNXFa25tsUF RNO3bl2JSaYOj7WriqTGcaabIDz7DwiLGM0t53kX4k1D7/Wx7+kaavkhNBR6W+61fp2G RnZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236708; x=1790841508; h=content-transfer-encoding:mime-version:references:in-reply-to :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=olGfWlX6xVbhFK+fX2D0BitKwIFHB7YuSmffyiYh0rE=; b=Z29aQK1evIpYi8XofXWYUeUp+pNH7a7vFR6GJFJ7ZdCWwL+vmby7LXXlTpc1ItEUW0 BtvC6lNHlWmrUocWETttL7BYQSSOC0+kdhnojxXwmz5S2vHI3xhea8KScH5hL4pflr97 xq8C8en1myG/udxWn4Iz+ldGem3wG8sizS9rvsz1dLuZHQvb6AsPPSbnUBp4GYzjmIi0 0s8MHwSxwtJkW21vqVb3FfOAM8e3AN+MVQNG1eXYwYU/dmsxqCuNSP4oG7v6a6eqF6o7 3w3afKSj1ff9xE4R17NNoYpdwGXTQWo3vD+LAXJAA9mABhRe3YoWOqsYtKPCBpqtVtwC UrVQ== X-Forwarded-Encrypted: i=1; AKwUvBwrRcgiDu3fUjnFvl+Rb/kbifFOPRIv4SAg61AfhFVi1mxTch79BQmS5t0khqT3UcWz0jSP+RLVnZEQeUA=@vger.kernel.org X-Gm-Message-State: AFuF++m4LgApqerTcxxiAQ3zsMVVSE0DjrrvHIU6HkEmbCAtCtM+ikNz uqvVRGI8kmv9Li0clAN3ILR5LyBC5PVuj+yrq4HH0cT6zP2UYoY9tDMYN4D241gKVao= X-Gm-Gg: AYBFou1kEbHMaEdYJrkD4w/jB8YpndmwmX68sPpzIYW5LqhylSpDOMr5paNa85nAbgp nZJ3n+rvLqBBUYAfywFIYfAup31xW0MYam9u5PNkh/Dj3m1mH/kVI5nkQb0m66oGOvV+YjJI6D6 o4OiqjXv5Ov5p9mUG1KlcQ5wJ66UTaHnZy7q/Lx03rIysJWfCKc7ZyXjcOaJbuS5v+2461qg1B1 AUAkH4JoesFj6+/eeS5NypDyW253beW4Y73d79W25TTWeypSzOJiVkrfI0+JNURRxCXTWl1F6hC w8jpU3lXOrfUIe2mG+6mYbiL1Kd69sQRVzb1BBbnyrXZ3B4T39vR6tzz74ptuAe0rfeoTpLlcGm 8HWTNQHQiVg4OcUgpCVwlHnGxvepHGrhWN6sExhtdxGNJ3yUKYioG5T9kXBzIw3Fweeg3jDaVfr YnpWnApyrkpTYof3CCU+TTz1vRP/5MgRL+Q+fTgZgAWyFbqYr2VQnhmcCMEEn+bb1/R5PzVf6CG wy9eh8XTrHw7fvZB2I= X-Received: by 2002:a17:90a:2ce6:b0:3a0:a055:1741 with SMTP id 98e67ed59e1d1-3a0a0552127mr324523a91.27.1790236708461; Thu, 24 Sep 2026 00:58:28 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:28 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 5/6] mm/sparse-vmemmap: open-code vmemmap_populate_address() Date: Thu, 24 Sep 2026 15:52:58 +0800 Message-ID: <20260924075259.2013039-6-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" vmemmap_populate_address() no longer has any callers that need the returned PTE. Its only remaining user, vmemmap_populate_range(), only checks whether population succeeded. Open-code vmemmap_populate_address() directly in vmemmap_populate_basepages(), remove the now-redundant range helper, and return -ENOMEM directly on failure. Signed-off-by: Muchun Song Acked-by: Qi Zheng --- v2: - Collect Acked-by from Qi Zheng --- mm/sparse-vmemmap.c | 54 ++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 37 deletions(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index a5b47e496322..f5364c1cafe5 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -315,8 +315,8 @@ static pgd_t * __meminit vmemmap_pgd_populate(unsigned = long addr, int node) return pgd; } =20 -static pte_t * __meminit vmemmap_populate_address(unsigned long addr, int = node, - struct vmem_altmap *altmap) +int __meminit vmemmap_populate_basepages(unsigned long start, unsigned lon= g end, + int node, struct vmem_altmap *altmap) { pgd_t *pgd; p4d_t *p4d; @@ -324,48 +324,28 @@ static pte_t * __meminit vmemmap_populate_address(uns= igned long addr, int node, pmd_t *pmd; pte_t *pte; =20 - pgd =3D vmemmap_pgd_populate(addr, node); - if (!pgd) - return NULL; - p4d =3D vmemmap_p4d_populate(pgd, addr, node); - if (!p4d) - return NULL; - pud =3D vmemmap_pud_populate(p4d, addr, node); - if (!pud) - return NULL; - pmd =3D vmemmap_pmd_populate(pud, addr, node); - if (!pmd) - return NULL; - pte =3D vmemmap_pte_populate(pmd, addr, node, altmap); - if (!pte) - return NULL; - vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); - - return pte; -} - -static int __meminit vmemmap_populate_range(unsigned long start, - unsigned long end, int node, - struct vmem_altmap *altmap) -{ - unsigned long addr =3D start; - pte_t *pte; - - for (; addr < end; addr +=3D PAGE_SIZE) { - pte =3D vmemmap_populate_address(addr, node, altmap); + for (unsigned long addr =3D start; addr < end; addr +=3D PAGE_SIZE) { + pgd =3D vmemmap_pgd_populate(addr, node); + if (!pgd) + return -ENOMEM; + p4d =3D vmemmap_p4d_populate(pgd, addr, node); + if (!p4d) + return -ENOMEM; + pud =3D vmemmap_pud_populate(p4d, addr, node); + if (!pud) + return -ENOMEM; + pmd =3D vmemmap_pmd_populate(pud, addr, node); + if (!pmd) + return -ENOMEM; + pte =3D vmemmap_pte_populate(pmd, addr, node, altmap); if (!pte) return -ENOMEM; + vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); } =20 return 0; } =20 -int __meminit vmemmap_populate_basepages(unsigned long start, unsigned lon= g end, - int node, struct vmem_altmap *altmap) -{ - return vmemmap_populate_range(start, end, node, altmap); -} - /* * Write protect the mirrored tail page structs for HVO. This will be * called from the hugetlb code when gathering and initializing the --=20 2.54.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 B28F034A797 for ; Thu, 24 Sep 2026 07:58:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236716; cv=none; b=KO0lgkw6k5g8EBRYMyXRx1e34OxNueNOUplR0F9Jfpnr3gAD1qXNUfenFZqrwkExl9aYTqnpGw1AkOcwBxSQgUohlDQHK0LVfVTUNBKjLTojY32h+Ic15P9oFVx3whiKIAaeUXOnrtEuJk74F75P8G1c1GbQX4uw9BMyvRcZnZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790236716; c=relaxed/simple; bh=DzMSx1CmV1cP2gnbnvgaolGqQOfTr+u7d0CKEQDb8HU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FYQetpYgH2pQLsVaLdC/xCq+8aOD0u5OKdDg7DCmA6UvMkEaLHh82+xpE5vKM96QYYDMQPn3P6Obll05uC7RUFT+6urq8hZkG/i+dEZVjOQKLFq/8fF9o3bsRD8aJkn8WL4JKxWd/fLe7Snj9yHTwJ4maGCjhIWhWQvmIJi2SSA= 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=OLaDw8ck; arc=none smtp.client-ip=74.125.227.140 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="OLaDw8ck" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-396ccd4f99cso1410802a91.0 for ; Thu, 24 Sep 2026 00:58:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1790236714; x=1790841514; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8r910VhEWgy1eIdXLPcYAHanh/sXYvzfGYAge0OSfUc=; b=OLaDw8ckgq4Woj0+aBWNNsVukyE8mwV8XaEFbPdsK4RTfhN7b792DNWVeo/khekE0j c5dRPdvm7I+pOLItTm1IYT53IK6itfgmZq1wY+rilGrprByQzNGlLunK2E48i6G9Gxl0 w3r6fAQ7RnYYd8yHRSR8puuoESpUU52UrTTj9Udw3n5w1iYJGw3kx77tkqzn4E/KDC/q U83a2copJ4lBkfc7Is2JSSftr5HqhSu6meAeWN+uyS4KESR6LSQxGThd+/MCU/8LSn6T vCcUXnresS8Zqh1yCHwAd1rsO+TN2WR3LQJc/qrdm5KRl3cMIaQIv/1ZcgF58fW4peEf WQWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790236714; x=1790841514; h=content-transfer-encoding:mime-version:references:in-reply-to :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=8r910VhEWgy1eIdXLPcYAHanh/sXYvzfGYAge0OSfUc=; b=JO8h4ZC2dhFVb+DZ0MAOkzEkQs1i1MnLsZe6GMaM+eD+589jCl9KTVirIR/TfuL0Bo pazVEFYvcEfLs4Ns3zsBPvBCfaZc12ae2c37c8DDBxJSdYjvzrFFwXUZ4VO9NACGFFiK XelGb/RkymiR/YIXDH+qTmXrGrcE/7Jh5D1fYeF9YZW7zPyof69puCDBLSx13hc8P8tg Ucj59TZ9uKEV2wuQIP2AgVAeL938NRkbbVVtSD/5rs0OjgfUPPjEXjJPJ88rZJLbkVHG hu2vSsbMKldrc4hNyxLpUx0rbyOEyLymiLqN8HVwoJRH3NnK7bjAPw4YSck7FswV3Xiy m1cw== X-Forwarded-Encrypted: i=1; AKwUvBxvhAzCsu0rUrHwi41XaE0OnTgNdWyJ8dM6xjPoq21HrJja+lXIKgLn5PyXW4lxyfKZl1wY1POZB7+2IAA=@vger.kernel.org X-Gm-Message-State: AFuF++liRNV90b5Rf3UEyeB5uqC01RWr0k5QKpe0pTLKOVAahgANjdfm 8jjwM2tMhdjGohEwRA3r8rpXHO2WuMTz0CQPAjjzNUtwPcuHFfOfNg3omuD91BUZ2G4= X-Gm-Gg: AYBFou0kUG05VrLAZuBvnqkyFIBQxYR3OIY22+vgiTSF81uZ3GhYIhDlBOgvMr6heT4 LICEkeKFmdUP/KGVL/G2kAisCwUdyGj2iobFx339+2nsmsHWZz/soaD9f/sHx3Dne5DMbgM5Jic yMhSMd4O+oI8yjauXocGoQWA75+LeavXQaxUS4fH81BVkXxGDj63Pzoy/G8yfPhNZgLh9ckrbSp 7eEjQ3YGQUY7M0xbP3BvsdkPoz3uDTXiMcDlShUgkiigHSo2SI6r1AnPk71s2fND8iOTsMfIivu 89/Gdb22NDD+olu/eHXzC/s93rvq3C8sm7+yvCpUvTOm267wMjmUiLOoJQhmpQR3wEcg2BXs92f DQc2hUC9UBemgxieoj/ixRqrTApZexGXAF702nQlkjuHWUKmyh2IREHYQZiXFFSipgKN4r4gV2M OJ+HnGBICmS1y68sX6Rs9O9sJ4uaMYEcvz3xPqPnS1vhK7jK0gQ6xUVZw6IlqRnu92mTSAyWJPq vEm1SiEAtvCoSsYY5s= X-Received: by 2002:a17:90b:4fca:b0:3a0:910e:84aa with SMTP id 98e67ed59e1d1-3a098d45437mr1424739a91.12.1790236713758; Thu, 24 Sep 2026 00:58:33 -0700 (PDT) Received: from n232-176-004.byted.org ([36.110.163.97]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0972eec92sm3575622a91.7.2026.09.24.00.58.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 00:58:33 -0700 (PDT) From: Muchun Song To: Madhavan Srinivasan , Mike Rapoport , Andrew Morton , David Hildenbrand Cc: Michael Ellerman , Nicholas Piggin , Christophe Leroy , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Qi Zheng , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , muchun.song@linux.dev Subject: [PATCH v2 6/6] mm/mm_init: add zone mismatch warning during page init Date: Thu, 24 Sep 2026 15:52:59 +0800 Message-ID: <20260924075259.2013039-7-songmuchun@bytedance.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260924075259.2013039-1-songmuchun@bytedance.com> References: <20260924075259.2013039-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For vmemmap-optimized sections, tail struct pages may be backed by shared vmemmap pages. Those shared pages must carry the same page zone ID as the struct pages initialized for the section. Warn in __init_single_page() if the shared tail page has a different page_zone_id(), which would indicate inconsistent initialization. Signed-off-by: Muchun Song --- v2: - New patch. --- mm/mm_init.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/mm_init.c b/mm/mm_init.c index 1650d6bc1211..bd02e8d06965 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -609,6 +609,9 @@ void __meminit __init_single_page(struct page *page, un= signed long pfn, if (!is_highmem_idx(zone)) set_page_address(page, __va(pfn << PAGE_SHIFT)); #endif + VM_WARN_ON_ONCE(vmemmap_optimizable_order(pfn_to_section_compound_order(p= fn)) && + page_zone_id(page + VMEMMAP_OPTIMIZATION_NR_STRUCT_PAGES) !=3D + page_zone_id(page)); } =20 #ifdef CONFIG_NUMA --=20 2.54.0