Merge tag 'iommu-updates-v6.10' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / iommu / intel / pasid.c
index 11f0b856d74c0c46196e10b29c5cf436724178cd..abce19e2ad6f4e55d7b7b662a4dda5ebef6cef29 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "iommu.h"
 #include "pasid.h"
+#include "../iommu-pages.h"
 
 /*
  * Intel IOMMU system wide PASID name space:
@@ -38,7 +39,7 @@ int intel_pasid_alloc_table(struct device *dev)
 {
        struct device_domain_info *info;
        struct pasid_table *pasid_table;
-       struct page *pages;
+       struct pasid_dir_entry *dir;
        u32 max_pasid = 0;
        int order, size;
 
@@ -59,14 +60,13 @@ int intel_pasid_alloc_table(struct device *dev)
 
        size = max_pasid >> (PASID_PDE_SHIFT - 3);
        order = size ? get_order(size) : 0;
-       pages = alloc_pages_node(info->iommu->node,
-                                GFP_KERNEL | __GFP_ZERO, order);
-       if (!pages) {
+       dir = iommu_alloc_pages_node(info->iommu->node, GFP_KERNEL, order);
+       if (!dir) {
                kfree(pasid_table);
                return -ENOMEM;
        }
 
-       pasid_table->table = page_address(pages);
+       pasid_table->table = dir;
        pasid_table->order = order;
        pasid_table->max_pasid = 1 << (order + PAGE_SHIFT + 3);
        info->pasid_table = pasid_table;
@@ -97,10 +97,10 @@ void intel_pasid_free_table(struct device *dev)
        max_pde = pasid_table->max_pasid >> PASID_PDE_SHIFT;
        for (i = 0; i < max_pde; i++) {
                table = get_pasid_table_from_pde(&dir[i]);
-               free_pgtable_page(table);
+               iommu_free_page(table);
        }
 
-       free_pages((unsigned long)pasid_table->table, pasid_table->order);
+       iommu_free_pages(pasid_table->table, pasid_table->order);
        kfree(pasid_table);
 }
 
@@ -146,7 +146,7 @@ static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
 retry:
        entries = get_pasid_table_from_pde(&dir[dir_index]);
        if (!entries) {
-               entries = alloc_pgtable_page(info->iommu->node, GFP_ATOMIC);
+               entries = iommu_alloc_page_node(info->iommu->node, GFP_ATOMIC);
                if (!entries)
                        return NULL;
 
@@ -158,7 +158,7 @@ retry:
                 */
                if (cmpxchg64(&dir[dir_index].val, 0ULL,
                              (u64)virt_to_phys(entries) | PASID_PTE_PRESENT)) {
-                       free_pgtable_page(entries);
+                       iommu_free_page(entries);
                        goto retry;
                }
                if (!ecap_coherent(info->iommu->ecap)) {