From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 79BE23290C9 for ; Wed, 13 May 2026 13:07:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677671; cv=none; b=PTZpFsMIktoxyxF+qT5XqMW2ni0l6D1gD3kWI2HsnNImc9wLOz8aWPDJ/F03vWlzuRJEVZfbqYRl72Vr6atlGUaBat4xdhzDR9cDRoyhMpD8gUSPznUDEr4nDNec4p6UZkoVKGZqCFqvLWD50+lz7NmE8mPt+X/JJOsWCtXvjps= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677671; c=relaxed/simple; bh=GYCGqB39Q3gEI/dSbPVy7i2q69RZjLuM6mXWMg6dNPo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EM/Xab/kVxTdncWJDpa0/FYlI2LtKBA8S/QAGw/bapayUoUzkK+ixQFjaFiZdn1hy/uHPvbttpXI5T5bsJ195cqm730qgQNFx+OdWvV1noYlI56f7TQFsFM/O0PJyuRHUkL1CDTfl63Erw0Q5v5LYsNrrU73OAOrziH02u/8Pr8= 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=Bo3id7E5; arc=none smtp.client-ip=209.85.216.49 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="Bo3id7E5" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-36900945df5so330556a91.0 for ; Wed, 13 May 2026 06:07:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1778677670; x=1779282470; 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; bh=W+0ze7EIzQ8zDlwa2Xdpv+yLCfHzqyRtA/0pp8bbhmY=; b=Bo3id7E5c9HS4VR7gJBE7Rwdp2eJMBl1DlgYfvAtEgalbwfSt88J3H3zPMgU17tyFW igFW9sSM0L/UBdgbLZzS6mLRp8uhXVtVsQJQEs1+qQHa3Gs7MSgQVp0gigZp04sO9U21 V5uC1+vcop6hnWlba/LakLSAR7dxrMLGnFlbAIKg2cwqlNtxeTBwpTSg46lGvkJUjBMz wNEgR+hcj2Gtd5pFgqkIHDYphbiSaMVQgE9j/fkzuTzLhYm/BvUuOmrTcA8K7Hs0DkYk Uu0ex04wJ3cNOZ2iH6XqMHMNALVZxXyTbjd4zjNkc08tLRCdy+1THLkakzJDrfLX8PMZ M28Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778677670; x=1779282470; 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; bh=W+0ze7EIzQ8zDlwa2Xdpv+yLCfHzqyRtA/0pp8bbhmY=; b=nbdGn65RhS2dQA6lTcbO/d0Nj7Fd1yJn7VazzEvywWJHMMrc7G+DzbMJkFdTsqnRq2 NoXp0swVpgwkiPhdI0ZNiZfqnK2J7g5Hcm9+C1GyS6X4GLd/q1GROfsJYMOf4/MgNGWu PY/ByOUtwT9pLqxcy8EAhVZBiT0r+HwYeSrPMK+uy39DHbm5p8+nHC6TVIEsZ8Tn0bUI BVqJWR6ujzQiHblXGKfuVIRUd2K1mA1adnOesmuHI8sUJqvvYNWQ/Xp7ta3iZTbetusb BeE91wa8CiO9fgjapvEdbZ8XFzkt1JmkUN5+zgaF95dz7HR7FcPLtv1BRZEZszbfi0ar v18Q== X-Forwarded-Encrypted: i=1; AFNElJ/xGzE61rrMLXWRVl/9+YqB9QhZDlg45InvJIs7kwRePxJOmp7UZr8x1Uqk+gKyoxIlkesqbXDtEjbK6MI=@vger.kernel.org X-Gm-Message-State: AOJu0YyQeQMzegLKWCvtNys4g2+F3qhFvJGB0viV4X4Gjxq/vmjbcXuy PTH9ONCtFaliVe1LrrucfaFaIc1hAOWhv296cqOOybX3e2uK1oX6Nq98EtqpD81MilQ= X-Gm-Gg: Acq92OGdekI9ktQhX2rLxIlUrH505W8I8UBsH+teODS7DMVFdT8t2vqwGimHf5fyZvE 4wOz523VNDsIjxQ7yHtjPu5I+3GZ32v56TQCe9Qh/EHoqsiuMzEr9YqKCyjVsiOgFhHyTE9gE0z gIQC0d6d6HC1rcP3wsKCfAwzdwxjynkTkYhWoDY9Q0j3VawFl6AwO0XM11DqY2LmiyWzj/6Cxvp k6kAB7KI5gA6bW1UxqXVSTV9OZqK1e91HpfLb6EiCtUsgbg5LOywVQsqGH7Q0k/RFvBAZCBSU5/ tWEBUVdoPrxVUacEQfra3YF3WKFzpcJq5JUFS1+A65kK8Tc1AV5omW2jh2d+7Hpf5s8yDE4ws7e HD62Jf7II48mDZbW347Z4yXDTm/Sw+IvKa7LKJx1imyjZBcfU3zEMQST+mpI/xT9v3gidfKSuY7 Fn0GhPKF+MOGSUFDBbp2mUnRJ0tJGPay5scKmC2AUZjUMhilSaYRGLVVjxjuccccOlmvu8rg== X-Received: by 2002:a17:90b:3f8c:b0:368:ed92:6f5 with SMTP id 98e67ed59e1d1-368f77f6980mr2850344a91.4.1778677669469; Wed, 13 May 2026 06:07:49 -0700 (PDT) Received: from PXLDJ45XCM.bytedance.net ([61.213.176.6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm166641925ad.66.2026.05.13.06.07.44 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 13 May 2026 06:07:49 -0700 (PDT) From: Muchun Song To: Andrew Morton , David Hildenbrand , Muchun Song , Oscar Salvador , Michael Ellerman , Madhavan Srinivasan Cc: Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Nicholas Piggin , Christophe Leroy , Ackerley Tng , Frank van der Linden , aneesh.kumar@linux.ibm.com, joao.m.martins@oracle.com, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Muchun Song Subject: [PATCH v2 03/69] powerpc/mm: Fix wrong addr_pfn tracking in compound vmemmap population Date: Wed, 13 May 2026 21:04:31 +0800 Message-ID: <20260513130542.35604-4-songmuchun@bytedance.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260513130542.35604-1-songmuchun@bytedance.com> References: <20260513130542.35604-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: 8bit vmemmap_populate_compound_pages() uses addr_pfn to determine the PFN offset within a compound page and to decide whether the current vmemmap slot should be populated as a head page mapping or should reuse a tail page mapping. However, addr_pfn is advanced manually in parallel with addr. The loop itself progresses in vmemmap address space, so each PAGE_SIZE step in addr covers PAGE_SIZE / sizeof(struct page) struct page slots. Since addr_pfn is compared against nr_pages in data-PFN units, it should advance by the same number of PFNs. The existing manual increments do not match that and therefore do not reliably track the PFN corresponding to the current addr. As a result, pfn_offset can be computed from the wrong PFN and the code can make the head/tail decision for the wrong compound-page position. Fix this by deriving addr_pfn directly from the current vmemmap address instead of carrying it as loop state. Fixes: f2b79c0d7968 ("powerpc/book3s64/radix: add support for vmemmap optimization for radix") Signed-off-by: Muchun Song --- arch/powerpc/mm/book3s64/radix_pgtable.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c index 10aced261cff..cf692b2b5f7b 100644 --- a/arch/powerpc/mm/book3s64/radix_pgtable.c +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c @@ -1314,7 +1314,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, * covering out both edges. */ unsigned long addr; - unsigned long addr_pfn = start_pfn; unsigned long next; pgd_t *pgd; p4d_t *p4d; @@ -1335,7 +1334,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, if (pmd_leaf(READ_ONCE(*pmd))) { /* existing huge mapping. Skip the range */ - addr_pfn += (PMD_SIZE >> PAGE_SHIFT); next = pmd_addr_end(addr, end); continue; } @@ -1348,11 +1346,11 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, * page whose VMEMMAP_RESERVE_NR pages were mapped and * this request fall in those pages. */ - addr_pfn += 1; next = addr + PAGE_SIZE; continue; } else { unsigned long nr_pages = pgmap_vmemmap_nr(pgmap); + unsigned long addr_pfn = page_to_pfn((struct page *)addr); unsigned long pfn_offset = addr_pfn - ALIGN_DOWN(addr_pfn, nr_pages); pte_t *tail_page_pte; @@ -1376,7 +1374,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, if (!pte) return -ENOMEM; - addr_pfn += 2; next = addr + 2 * PAGE_SIZE; continue; } @@ -1392,7 +1389,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, return -ENOMEM; vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); - addr_pfn += 1; next = addr + PAGE_SIZE; continue; } @@ -1402,7 +1398,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, return -ENOMEM; vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); - addr_pfn += 1; next = addr + PAGE_SIZE; continue; } -- 2.54.0