From nobody Sat Apr 4 04:54:45 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 B28F83DFC9F for ; Fri, 20 Mar 2026 18:07:39 +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=1774030059; cv=none; b=Bnwacia8QaV6AYHfwSnLpWnJmLzqCUThFINXWioTcBNrlwL2llnAIBhfyJbroeDWmKFebY49zOLMV+YyJOw9+7rNuFCDvF1SVbDkfJvr6wasWOJb2RsOwtDgJTFZigYWXY1buXUs46G9MCdepJpju0SMSXY7T/ElCV7f4g8Qb9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774030059; c=relaxed/simple; bh=XUJkWVB3zKGz0f5aKQPRTsHRbbcmexMUG5ohKhs002I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sFaddaPb8aXkW6jUwarz2sTz2Tzds7k8oLSO0YSG+emyUGbiuOcjDxIBxGM5t6Z//dv4OBtWciS5xEeOW2pXZHrn23bGSAnxKYgX8xfrxzLfUQIua9cJ4lNA2dcMJcZjLj8Awkac8zTHweBDFFNQVPo3esu0TgyA5qES5BNiu/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dwMPvtMm; 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="dwMPvtMm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 96194C19425; Fri, 20 Mar 2026 18:07:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774030059; bh=XUJkWVB3zKGz0f5aKQPRTsHRbbcmexMUG5ohKhs002I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dwMPvtMm8PDwhuywgcTI8jcb1ncAxe3d8tmnub93/x4ITsJAKdzpERxWuHLv/R7/N suKI54oXZXQ3U0Nw23+e0BRnDexcTyYcre6ka0k12DZPHN2poqkNcitacbfI4t44He yi2C90e2NLrd96zNnp8mLyMhDn7yiU0Mk1TIA6VG5hRVWPHl9GNAWo4U3VwSpgHXYg VODla42wqhwn5DkPhEKSExIVe+pGRVmrou9CbyTY/NkBXiOMZwT1wOzYzFs26MAKgu KJ3GZdlPcJoYuVZ7wxrfUlThcVWTdiM9TyngF7jnb1pE3RGak+N9GCYy76zCS3C8iQ 4kHGHV66ClQMg== 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 02/13] mm/huge: avoid big else branch in zap_huge_pmd() Date: Fri, 20 Mar 2026 18:07:19 +0000 Message-ID: <6b4d5efdbf5554b8fe788f677d0b50f355eec999.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" We don't need to have an extra level of indentation, we can simply exit early in the first two branches. No functional change intended. Reviewed-by: Baolin Wang Acked-by: Qi Zheng Signed-off-by: Lorenzo Stoakes (Oracle) Reviewed-by: Suren Baghdasaryan --- 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 2775309b317a..4e8df3a35cab 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2328,8 +2328,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 @@ -2350,59 +2352,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