Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/huge: avoid big else branch in zap_huge_pmd()

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.

Link: https://lkml.kernel.org/r/6b4d5efdbf5554b8fe788f677d0b50f355eec999.1774029655.git.ljs@kernel.org
Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Acked-by: Qi Zheng <zhengqi.arch@bytedance.com>
Reviewed-by: Suren Baghdasaryan <surenb@google.com>
Cc: Barry Song <baohua@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Lance Yang <lance.yang@linux.dev>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Nico Pache <npache@redhat.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Lorenzo Stoakes (Oracle) and committed by
Andrew Morton
6886f937 c0ea52c1

+53 -50
+53 -50
mm/huge_memory.c
··· 2405 2405 int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, 2406 2406 pmd_t *pmd, unsigned long addr) 2407 2407 { 2408 - pmd_t orig_pmd; 2408 + struct folio *folio = NULL; 2409 + int flush_needed = 1; 2409 2410 spinlock_t *ptl; 2411 + pmd_t orig_pmd; 2410 2412 2411 2413 tlb_change_page_size(tlb, HPAGE_PMD_SIZE); 2412 2414 ··· 2429 2427 if (arch_needs_pgtable_deposit()) 2430 2428 zap_deposited_table(tlb->mm, pmd); 2431 2429 spin_unlock(ptl); 2432 - } else if (is_huge_zero_pmd(orig_pmd)) { 2430 + return 1; 2431 + } 2432 + if (is_huge_zero_pmd(orig_pmd)) { 2433 2433 if (!vma_is_dax(vma) || arch_needs_pgtable_deposit()) 2434 2434 zap_deposited_table(tlb->mm, pmd); 2435 2435 spin_unlock(ptl); 2436 - } else { 2437 - struct folio *folio = NULL; 2438 - int flush_needed = 1; 2439 - 2440 - if (pmd_present(orig_pmd)) { 2441 - struct page *page = pmd_page(orig_pmd); 2442 - 2443 - folio = page_folio(page); 2444 - folio_remove_rmap_pmd(folio, page, vma); 2445 - WARN_ON_ONCE(folio_mapcount(folio) < 0); 2446 - VM_BUG_ON_PAGE(!PageHead(page), page); 2447 - } else if (pmd_is_valid_softleaf(orig_pmd)) { 2448 - const softleaf_t entry = softleaf_from_pmd(orig_pmd); 2449 - 2450 - folio = softleaf_to_folio(entry); 2451 - flush_needed = 0; 2452 - 2453 - if (!thp_migration_supported()) 2454 - WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); 2455 - } 2456 - 2457 - if (folio_test_anon(folio)) { 2458 - zap_deposited_table(tlb->mm, pmd); 2459 - add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR); 2460 - } else { 2461 - if (arch_needs_pgtable_deposit()) 2462 - zap_deposited_table(tlb->mm, pmd); 2463 - add_mm_counter(tlb->mm, mm_counter_file(folio), 2464 - -HPAGE_PMD_NR); 2465 - 2466 - /* 2467 - * Use flush_needed to indicate whether the PMD entry 2468 - * is present, instead of checking pmd_present() again. 2469 - */ 2470 - if (flush_needed && pmd_young(orig_pmd) && 2471 - likely(vma_has_recency(vma))) 2472 - folio_mark_accessed(folio); 2473 - } 2474 - 2475 - if (folio_is_device_private(folio)) { 2476 - folio_remove_rmap_pmd(folio, &folio->page, vma); 2477 - WARN_ON_ONCE(folio_mapcount(folio) < 0); 2478 - folio_put(folio); 2479 - } 2480 - 2481 - spin_unlock(ptl); 2482 - if (flush_needed) 2483 - tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE); 2436 + return 1; 2484 2437 } 2438 + 2439 + if (pmd_present(orig_pmd)) { 2440 + struct page *page = pmd_page(orig_pmd); 2441 + 2442 + folio = page_folio(page); 2443 + folio_remove_rmap_pmd(folio, page, vma); 2444 + WARN_ON_ONCE(folio_mapcount(folio) < 0); 2445 + VM_BUG_ON_PAGE(!PageHead(page), page); 2446 + } else if (pmd_is_valid_softleaf(orig_pmd)) { 2447 + const softleaf_t entry = softleaf_from_pmd(orig_pmd); 2448 + 2449 + folio = softleaf_to_folio(entry); 2450 + flush_needed = 0; 2451 + 2452 + if (!thp_migration_supported()) 2453 + WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); 2454 + } 2455 + 2456 + if (folio_test_anon(folio)) { 2457 + zap_deposited_table(tlb->mm, pmd); 2458 + add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR); 2459 + } else { 2460 + if (arch_needs_pgtable_deposit()) 2461 + zap_deposited_table(tlb->mm, pmd); 2462 + add_mm_counter(tlb->mm, mm_counter_file(folio), 2463 + -HPAGE_PMD_NR); 2464 + 2465 + /* 2466 + * Use flush_needed to indicate whether the PMD entry 2467 + * is present, instead of checking pmd_present() again. 2468 + */ 2469 + if (flush_needed && pmd_young(orig_pmd) && 2470 + likely(vma_has_recency(vma))) 2471 + folio_mark_accessed(folio); 2472 + } 2473 + 2474 + if (folio_is_device_private(folio)) { 2475 + folio_remove_rmap_pmd(folio, &folio->page, vma); 2476 + WARN_ON_ONCE(folio_mapcount(folio) < 0); 2477 + folio_put(folio); 2478 + } 2479 + 2480 + spin_unlock(ptl); 2481 + if (flush_needed) 2482 + tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE); 2483 + 2485 2484 return 1; 2486 2485 } 2487 2486