From nobody Mon Apr 6 13:30:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 22ED93D3D09 for ; Thu, 19 Mar 2026 13:00:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773925240; cv=none; b=qxqdzTehjFJPUyLJ+JqUr+X9IBkKn5FcgzV2zd8OnLRX7sBmAgYGZVD8DqPdHGR5otjvYIH1ZD/Hgn2Gd8jPvbw68V8RWvpBNLuAvc37K2BjknkWmXjyK/HFoDs0xwnYMIpciENSbonW0yt1mxS1T1oN+Ee3JuWLhPsBzcDEcU4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773925240; c=relaxed/simple; bh=o+lpylSbdML8A401ScmIug87esbYv315lcenpqyFup4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Bvu+d5gRESFNOZoCsrcgq+nnx3d+838cJ7ZCGStdRKvFKAD70SyY+jBlhmCNdAuo8k531AXeHZmXWxWRiVI4WfD5OUiF6RYpog7wx8h3n9VtIgbdPA7d8fMECOb4WGsYFXN3UfGotFBPbNpZILClZFOWDd1sKCXXIUPHOChPr7o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Dxiad9S3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Dxiad9S3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99CF5C2BCAF; Thu, 19 Mar 2026 13:00:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773925240; bh=o+lpylSbdML8A401ScmIug87esbYv315lcenpqyFup4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Dxiad9S3H0CJ/OOlBfydIz2ItScNVD7AEOxS3SlYNwW60Uk/Z+vxaOyBwqCkUD2n0 GnnEjEwxc65D7gnXBahnHYzCkUdopJ3LqJSQPawb0m0fn65GS/dNeOuCEt/1HmBmPN eS8gjkoANr/PtXnPb5I3bdwKXXr3plFPhtJ+IrtlX8LkJDxPp05uBpRqrlyXUGzO// 5z/nbjuZfWoPvaiVW4oIDndmEvIKCDCb1aG5dbLgufq24cDCgT9hD4s733AwYKsE5C sGTxypHdf7hEN72j4kvD8Am5VZG+CVOsm1vOVF7hlyrQQgIXU4MwQCzhmzF7l3xImm JAf/psSuUgplw== From: "Lorenzo Stoakes (Oracle)" To: Andrew Morton Cc: David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 7/9] mm/huge_memory: deduplicate zap deposited table call Date: Thu, 19 Mar 2026 13:00:13 +0000 Message-ID: <29fa4129cd560681c67433b4c344b2c9a027d1b4.1773924928.git.ljs@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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" Rather than having separate logic for each case determining whether to zap the deposited table, simply track this via a boolean. We check separately if the architecture requires it. Signed-off-by: Lorenzo Stoakes (Oracle) --- mm/huge_memory.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 499c31bf8f83..c4e00c645e58 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2431,6 +2431,7 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_a= rea_struct *vma, pmd_t *pmd, unsigned long addr) { struct folio *folio =3D NULL; + bool needs_deposit =3D false; bool flush_needed =3D false; spinlock_t *ptl; pmd_t orig_pmd; @@ -2450,23 +2451,18 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm= _area_struct *vma, tlb->fullmm); arch_check_zapped_pmd(vma, orig_pmd); tlb_remove_pmd_tlb_entry(tlb, pmd, addr); - if (vma_is_special_huge(vma)) { - if (arch_needs_pgtable_deposit()) - zap_deposited_table(tlb->mm, pmd); + if (vma_is_special_huge(vma)) goto out; - } if (is_huge_zero_pmd(orig_pmd)) { - if (!vma_is_dax(vma) || arch_needs_pgtable_deposit()) - zap_deposited_table(tlb->mm, pmd); + needs_deposit =3D !vma_is_dax(vma); goto out; } =20 if (pmd_present(orig_pmd)) { - struct page *page =3D pmd_page(orig_pmd); + folio =3D pmd_folio(orig_pmd); =20 flush_needed =3D true; - folio =3D page_folio(page); - folio_remove_rmap_pmd(folio, page, vma); + folio_remove_rmap_pmd(folio, &folio->page, vma); WARN_ON_ONCE(folio_mapcount(folio) < 0); } else if (pmd_is_valid_softleaf(orig_pmd)) { const softleaf_t entry =3D softleaf_from_pmd(orig_pmd); @@ -2481,11 +2477,9 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_= area_struct *vma, } =20 if (folio_test_anon(folio)) { - zap_deposited_table(tlb->mm, pmd); + needs_deposit =3D true; add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR); } else { - if (arch_needs_pgtable_deposit()) - zap_deposited_table(tlb->mm, pmd); add_mm_counter(tlb->mm, mm_counter_file(folio), -HPAGE_PMD_NR); =20 @@ -2505,6 +2499,9 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_a= rea_struct *vma, } =20 out: + if (arch_needs_pgtable_deposit() || needs_deposit) + zap_deposited_table(tlb->mm, pmd); + spin_unlock(ptl); if (flush_needed) tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE); --=20 2.53.0