Commit 0103b27a authored by Kefeng Wang's avatar Kefeng Wang Committed by Andrew Morton

mm: use pfn_swap_entry_to_folio() in zap_huge_pmd()

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.orgSigned-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Cc: David Hildenbrand <david@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 439992ff
...@@ -1905,12 +1905,14 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, ...@@ -1905,12 +1905,14 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
zap_deposited_table(tlb->mm, pmd); zap_deposited_table(tlb->mm, pmd);
spin_unlock(ptl); spin_unlock(ptl);
} else { } else {
struct page *page = NULL; struct folio *folio = NULL;
int flush_needed = 1; int flush_needed = 1;
if (pmd_present(orig_pmd)) { if (pmd_present(orig_pmd)) {
page = pmd_page(orig_pmd); struct page *page = pmd_page(orig_pmd);
folio_remove_rmap_pmd(page_folio(page), page, vma);
folio = page_folio(page);
folio_remove_rmap_pmd(folio, page, vma);
VM_BUG_ON_PAGE(page_mapcount(page) < 0, page); VM_BUG_ON_PAGE(page_mapcount(page) < 0, page);
VM_BUG_ON_PAGE(!PageHead(page), page); VM_BUG_ON_PAGE(!PageHead(page), page);
} else if (thp_migration_supported()) { } else if (thp_migration_supported()) {
...@@ -1918,23 +1920,24 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, ...@@ -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)); VM_BUG_ON(!is_pmd_migration_entry(orig_pmd));
entry = pmd_to_swp_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; flush_needed = 0;
} else } else
WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); 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); zap_deposited_table(tlb->mm, pmd);
add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR); add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR);
} else { } else {
if (arch_needs_pgtable_deposit()) if (arch_needs_pgtable_deposit())
zap_deposited_table(tlb->mm, pmd); 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); spin_unlock(ptl);
if (flush_needed) if (flush_needed)
tlb_remove_page_size(tlb, page, HPAGE_PMD_SIZE); tlb_remove_page_size(tlb, &folio->page, HPAGE_PMD_SIZE);
} }
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment