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.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>
This commit is contained in:
parent
439992ff46
commit
0103b27a6b
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user