mm: use pfn_swap_entry_to_folio() in zap_huge_pmd()
authorKefeng Wang <wangkefeng.wang@huawei.com>
Thu, 11 Jan 2024 15:24:25 +0000 (15:24 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 22 Feb 2024 00:00:03 +0000 (16:00 -0800)
Call pfn_swap_entry_to_folio() in zap_huge_pmd() as preparation for
converting mm counter functions to take a folio.  Saves a call to
compound_head() embedded inside PageAnon().

Link: https://lkml.kernel.org/r/20240111152429.3374566-7-willy@infradead.org
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/huge_memory.c

index 33b7200..7a28a7d 100644 (file)
@@ -1905,12 +1905,14 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
                zap_deposited_table(tlb->mm, pmd);
                spin_unlock(ptl);
        } else {
-               struct page *page = NULL;
+               struct folio *folio = NULL;
                int flush_needed = 1;
 
                if (pmd_present(orig_pmd)) {
-                       page = pmd_page(orig_pmd);
-                       folio_remove_rmap_pmd(page_folio(page), page, vma);
+                       struct page *page = pmd_page(orig_pmd);
+
+                       folio = page_folio(page);
+                       folio_remove_rmap_pmd(folio, page, vma);
                        VM_BUG_ON_PAGE(page_mapcount(page) < 0, page);
                        VM_BUG_ON_PAGE(!PageHead(page), page);
                } else if (thp_migration_supported()) {
@@ -1918,23 +1920,24 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
 
                        VM_BUG_ON(!is_pmd_migration_entry(orig_pmd));
                        entry = pmd_to_swp_entry(orig_pmd);
-                       page = pfn_swap_entry_to_page(entry);
+                       folio = pfn_swap_entry_folio(entry);
                        flush_needed = 0;
                } else
                        WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!");
 
-               if (PageAnon(page)) {
+               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_counter_file(page), -HPAGE_PMD_NR);
+                       add_mm_counter(tlb->mm, mm_counter_file(&folio->page),
+                                      -HPAGE_PMD_NR);
                }
 
                spin_unlock(ptl);
                if (flush_needed)
-                       tlb_remove_page_size(tlb, page, HPAGE_PMD_SIZE);
+                       tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE);
        }
        return 1;
 }