static void release_pte_pages(pte_t *pte, pte_t *_pte,
                struct list_head *compound_pagelist)
 {
-       struct page *page, *tmp;
+       struct folio *folio, *tmp;
 
        while (--_pte >= pte) {
                pte_t pteval = *_pte;
 
-               page = pte_page(pteval);
+               folio = pfn_folio(pte_pfn(pteval));
                if (!pte_none(pteval) && !is_zero_pfn(pte_pfn(pteval)) &&
-                               !PageCompound(page))
-                       release_pte_page(page);
+                               !folio_test_large(folio))
+                       release_pte_folio(folio);
        }
 
-       list_for_each_entry_safe(page, tmp, compound_pagelist, lru) {
-               list_del(&page->lru);
-               release_pte_page(page);
+       list_for_each_entry_safe(folio, tmp, compound_pagelist, lru) {
+               list_del(&folio->lru);
+               release_pte_folio(folio);
        }
 }