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 9B37E34BA21 for ; Wed, 18 Mar 2026 20:40:04 +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=1773866404; cv=none; b=ddPSvEnmZtmaEKVPWtgkDG2BmfVHFLKyravnjNZsp4tjNf9hCWufXZyWymdT2FV8PNYq+x5weWHoOtw0n4//meJvMThh/ckOCzyD3NSTpb1CLU1BWYTBayXUkWA7mJKZytkuWzPWzkIADzgjeoKq4CO+8S+5/jtOzVSlc02ntrU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773866404; c=relaxed/simple; bh=/BZKRHWTrmwni6hMvARLgtvWyItsLi87T5oiCEhDDRg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eRH55cG+VVMg6eAzFmVdUnO26SRVOHX6uyxoC+YNud5o4CPtD8LTP+dpQjWPoozExHCwcM0EyOQY7s6QAezp9RyScxM7rYQVBgPdX7Osz2ouujm7uyaT1CPbohzEl1XdQgu/HHGnFjjUzxY9gNlaUPM/nt6qq2kBGTU8n4N4W3I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dNk7YNpO; 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="dNk7YNpO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1F280C19424; Wed, 18 Mar 2026 20:40:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773866404; bh=/BZKRHWTrmwni6hMvARLgtvWyItsLi87T5oiCEhDDRg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dNk7YNpOW+pv4P+2l27X2/icD0/NxcJ921AC8DS6z39Slv9DqzhAXbWgPIsSWn6r/ rJ3jqrKwviThEq8g/mo6h4ZQj4EnZW4ZjFiI15vHcV1toqvYQLm8wLNCcysSQ7wZiB qzfvjqTE5Wg6x98z2qpWrza6Gsxl7/5tCtEXHBi6PRh6hPsiXtma64fkrZt7yVMqqw j4prB1i7ERZQEfXi/rk3utBZImLtREU1BAO9h4J0gSCnduQ2jcycSHDf1Q4y3B4MyR h6vLN2Wq94SBl4FMFR3yLVwdyhEllyNz/u9oXvphiLnEG9T72IWycl2YWIKzg2/oxs ltlXs/ZDvoeVw== 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 2/8] mm/huge: avoid big else branch in zap_huge_pmd() Date: Wed, 18 Mar 2026 20:39:24 +0000 Message-ID: <10be43ead023e9f65333bcaf4064d9d197111405.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" We don't need to have an extra level of indentation, we can simply exit early in the first two branches. Signed-off-by: Lorenzo Stoakes (Oracle) Acked-by: Qi Zheng Reviewed-by: Baolin Wang --- mm/huge_memory.c | 87 +++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index f76edfa91e96..4ebe1f19341e 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2421,8 +2421,10 @@ static inline void zap_deposited_table(struct mm_str= uct *mm, pmd_t *pmd) int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long addr) { - pmd_t orig_pmd; + struct folio *folio =3D NULL; + int flush_needed =3D 1; spinlock_t *ptl; + pmd_t orig_pmd; =20 tlb_change_page_size(tlb, HPAGE_PMD_SIZE); =20 @@ -2443,59 +2445,60 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_= area_struct *vma, if (arch_needs_pgtable_deposit()) zap_deposited_table(tlb->mm, pmd); spin_unlock(ptl); - } else if (is_huge_zero_pmd(orig_pmd)) { + return 1; + } + if (is_huge_zero_pmd(orig_pmd)) { if (!vma_is_dax(vma) || arch_needs_pgtable_deposit()) zap_deposited_table(tlb->mm, pmd); spin_unlock(ptl); - } else { - struct folio *folio =3D NULL; - int flush_needed =3D 1; + return 1; + } =20 - if (pmd_present(orig_pmd)) { - struct page *page =3D pmd_page(orig_pmd); + if (pmd_present(orig_pmd)) { + struct page *page =3D pmd_page(orig_pmd); =20 - folio =3D page_folio(page); - folio_remove_rmap_pmd(folio, page, vma); - WARN_ON_ONCE(folio_mapcount(folio) < 0); - VM_BUG_ON_PAGE(!PageHead(page), page); - } else if (pmd_is_valid_softleaf(orig_pmd)) { - const softleaf_t entry =3D softleaf_from_pmd(orig_pmd); + folio =3D page_folio(page); + folio_remove_rmap_pmd(folio, page, vma); + WARN_ON_ONCE(folio_mapcount(folio) < 0); + VM_BUG_ON_PAGE(!PageHead(page), page); + } else if (pmd_is_valid_softleaf(orig_pmd)) { + const softleaf_t entry =3D softleaf_from_pmd(orig_pmd); =20 - folio =3D softleaf_to_folio(entry); - flush_needed =3D 0; + folio =3D softleaf_to_folio(entry); + flush_needed =3D 0; =20 - if (!thp_migration_supported()) - WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); - } + if (!thp_migration_supported()) + WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); + } =20 - if (folio_test_anon(folio)) { + if (folio_test_anon(folio)) { + zap_deposited_table(tlb->mm, pmd); + 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_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); - - /* - * Use flush_needed to indicate whether the PMD entry - * is present, instead of checking pmd_present() again. - */ - if (flush_needed && pmd_young(orig_pmd) && - likely(vma_has_recency(vma))) - folio_mark_accessed(folio); - } + add_mm_counter(tlb->mm, mm_counter_file(folio), + -HPAGE_PMD_NR); =20 - if (folio_is_device_private(folio)) { - folio_remove_rmap_pmd(folio, &folio->page, vma); - WARN_ON_ONCE(folio_mapcount(folio) < 0); - folio_put(folio); - } + /* + * Use flush_needed to indicate whether the PMD entry + * is present, instead of checking pmd_present() again. + */ + if (flush_needed && pmd_young(orig_pmd) && + likely(vma_has_recency(vma))) + folio_mark_accessed(folio); + } =20 - spin_unlock(ptl); - if (flush_needed) - tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE); + if (folio_is_device_private(folio)) { + folio_remove_rmap_pmd(folio, &folio->page, vma); + WARN_ON_ONCE(folio_mapcount(folio) < 0); + folio_put(folio); } + + spin_unlock(ptl); + if (flush_needed) + tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE); + return 1; } =20 --=20 2.53.0