* @page: head struct page of the page.
* @order: order of the page
*/
-static inline void __iommu_free_account(struct page *page, int order)
+static inline void __iommu_free_account(struct page *page)
{
+ unsigned int order = folio_order(page_folio(page));
const long pgcnt = 1l << order;
mod_node_page_state(page_pgdat(page), NR_IOMMU_PAGES, -pgcnt);
*/
static inline void *iommu_alloc_pages_node(int nid, gfp_t gfp, int order)
{
- struct page *page = alloc_pages_node(nid, gfp | __GFP_ZERO, order);
+ struct page *page =
+ alloc_pages_node(nid, gfp | __GFP_ZERO | __GFP_COMP, order);
if (unlikely(!page))
return NULL;
return;
page = virt_to_page(virt);
- __iommu_free_account(page, order);
- __free_pages(page, order);
+ __iommu_free_account(page);
+ put_page(page);
}
/**
struct page *p = list_entry(page->prev, struct page, lru);
list_del(&p->lru);
- __iommu_free_account(p, 0);
+ __iommu_free_account(p);
put_page(p);
}
}