From nobody Mon Apr 6 09:10:02 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 DA9473E0C7C for ; Fri, 20 Mar 2026 18:07:52 +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=1774030072; cv=none; b=gDQKrd/XZ0JS/KnqoFq6xn90qIr8ealSUsYBMfxU27DzzumyMRiuPJKfn/30LLxUBYeJHtlpPAcPxAw4SsPkKH7K1twwmERt/wgHyMrAapEu2QFA5xO8bELfiO8mEuVRrwRm12OsqUvcs/1CdeoqijzBxVtgd6VjDC53stlNXD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774030072; c=relaxed/simple; bh=Ram9Rs4qqm5tPTEq7peh56y47e5xBm78Wi3l40G/zq8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OZ1zi6LzXanxpbIGWalcFKrEEBvKFceH/wCivsrezzfahTiuGpYlU9079PONauqea81nSuyL3psMVNiehRQECFdD9jUHKhKzUUIHztEEqyRn1gIT57u1WvHuQXDcjAdHV8t2NaDI7dNT2QiSt5gLvVN0K6wBjYRJTxMibNdnLB8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lUFHfM00; 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="lUFHfM00" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36810C19425; Fri, 20 Mar 2026 18:07:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774030072; bh=Ram9Rs4qqm5tPTEq7peh56y47e5xBm78Wi3l40G/zq8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lUFHfM00kM5L74fQT1thqwmi1KonthuAYbSBB4Bb9I06HZcQG7K0c/95TZDYsbqOo RPikeYS+Nx2SCSHWU3PsgfHD+ra5ezwC6ymJH7z24ykI2mcIqFuaxYZvYWYr/FivfP hdEW5YFLXastAizTavgbetEeY4qCCohtcxnA0aV1ZYQd5ZDSjDJU+iLUMkzTJcASwd jKYEPyYDJK0weSmU71FqmJoKnN0sh7WVIUrQY7nUfDx6GptHZ44AKs6b1BaQvaB+WN sp8J+c3mFcejdvhFYFPxRp0+AtBDkk9vi4eUzvuJmcKck86FIvUM+8WwkMBlKrhQJO PbbpruhyTOZYQ== 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 , Kiryl Shutsemau , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 07/13] mm/huge_memory: deduplicate zap deposited table call Date: Fri, 20 Mar 2026 18:07:24 +0000 Message-ID: <71f576a1fbcd27a86322d12caa937bcdacf75407.1774029655.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 default this to whether the architecture requires it, and update it as required elsewhere. Signed-off-by: Lorenzo Stoakes (Oracle) Reviewed-by: Baolin Wang Reviewed-by: Suren Baghdasaryan --- mm/huge_memory.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4add863cd18f..fca44aec6022 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2337,6 +2337,7 @@ static inline void zap_deposited_table(struct mm_stru= ct *mm, pmd_t *pmd) bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long addr) { + bool has_deposit =3D arch_needs_pgtable_deposit(); struct folio *folio =3D NULL; bool flush_needed =3D false; spinlock_t *ptl; @@ -2357,23 +2358,19 @@ 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); + if (!vma_is_dax(vma)) + has_deposit =3D true; 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); @@ -2388,11 +2385,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); + has_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 @@ -2412,6 +2407,9 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_a= rea_struct *vma, } =20 out: + if (has_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