From nobody Mon Apr 6 18:22:50 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 C8F4C34B1AB for ; Wed, 18 Mar 2026 20:40:18 +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=1773866418; cv=none; b=KY85d10wZpnkX9ZAjakP7SbjraYYMwb1X+SphGt7TcQM3RgGW1ImF20kKc9lKM5VADxiTNi8gBZgV+2hNmLL817kAY7GKG9hTMl0lzX5AO0rOm2o5VBw+xtheZvAqqK3rOGJEahvmCijQSLQlqhq1L/eL2pV/wK/IYOmIG5ENE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773866418; c=relaxed/simple; bh=E01AFawUgRlaY07x436+rCWEekEc+HPRai65dkjw64E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ULWk9pqr3dfp8ta0DS7aT+4yELK+GXqPB9YG1zjeNT/YTcOEfn5aOGvB2C39KrnUDCPC3u5ybkcc4Ql89AtR/SgIqgwm7jKNYP0wy1f1jlcX+tVf3X1mLH68jA6PZSfqihIvktUpgxYrMQV9nRWmoNelEY+1G8zyvzix45Ohw6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L+fyh4Zy; 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="L+fyh4Zy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0ADB9C2BC9E; Wed, 18 Mar 2026 20:40:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773866418; bh=E01AFawUgRlaY07x436+rCWEekEc+HPRai65dkjw64E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L+fyh4ZydYkd4WFvJ9Xsbol19Tx+juyZovtGPhzUXgZNtJEdqz4+Fp13fEM+TrkZX VZ7noDLS1+abHTKUs0XHYP8SRahlrrqTW5A2R/HBTZlt2xdzyZxCEcGxl51u/kZfIT SH7rIPlU/CGxGsokn7r37FvNu8M+jOSm2CxuVoo2y3AnqXKXrT2J8O4iZKqccrGVhI zHECftogKwOR60GR3J96WVFWxPjWucpOc9zqveiqMuOHKOAW345mkJODgvtvojmMx1 0a9WHW1xwqBq1cM1O7GBUYa3yQyrlCukYZaAXGfv/nqVfbmdan7GpQmJfE7El0O4yZ /CW4HSV0JOa0A== 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 7/8] mm/huge_memory: deduplicate zap deposited table call Date: Wed, 18 Mar 2026 20:39:29 +0000 Message-ID: <3e6343f91f8811fd1cf66f03ddde493daf95c0e3.1773865827.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. Also use pmd_folio() direct in the present case. 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 015f6d679d26..bcc74b0172fa 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2432,6 +2432,7 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_a= rea_struct *vma, { struct folio *folio =3D NULL; bool flush_needed =3D false; + bool needs_deposit =3D false; bool ret =3D true; spinlock_t *ptl; pmd_t orig_pmd; @@ -2451,23 +2452,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; } if (pmd_present(orig_pmd)) { - struct page *page =3D pmd_page(orig_pmd); + folio =3D pmd_folio(orig_pmd); 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); @@ -2483,11 +2479,9 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_= area_struct *vma, } 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); @@ -2507,6 +2501,9 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_a= rea_struct *vma, } 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); -- 2.53.0