2727#include "iommu.h"
2828#include "../dma-iommu.h"
2929#include "../irq_remapping.h"
30+ #include "../iommu-pages.h"
3031#include "pasid.h"
3132#include "cap_audit.h"
3233#include "perfmon.h"
@@ -298,22 +299,6 @@ static int __init intel_iommu_setup(char *str)
298299}
299300__setup ("intel_iommu=" , intel_iommu_setup );
300301
301- void * alloc_pgtable_page (int node , gfp_t gfp )
302- {
303- struct page * page ;
304- void * vaddr = NULL ;
305-
306- page = alloc_pages_node (node , gfp | __GFP_ZERO , 0 );
307- if (page )
308- vaddr = page_address (page );
309- return vaddr ;
310- }
311-
312- void free_pgtable_page (void * vaddr )
313- {
314- free_page ((unsigned long )vaddr );
315- }
316-
317302static int domain_type_is_si (struct dmar_domain * domain )
318303{
319304 return domain -> domain .type == IOMMU_DOMAIN_IDENTITY ;
@@ -545,7 +530,7 @@ struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus,
545530 if (!alloc )
546531 return NULL ;
547532
548- context = alloc_pgtable_page (iommu -> node , GFP_ATOMIC );
533+ context = iommu_alloc_page_node (iommu -> node , GFP_ATOMIC );
549534 if (!context )
550535 return NULL ;
551536
@@ -719,17 +704,17 @@ static void free_context_table(struct intel_iommu *iommu)
719704 for (i = 0 ; i < ROOT_ENTRY_NR ; i ++ ) {
720705 context = iommu_context_addr (iommu , i , 0 , 0 );
721706 if (context )
722- free_pgtable_page (context );
707+ iommu_free_page (context );
723708
724709 if (!sm_supported (iommu ))
725710 continue ;
726711
727712 context = iommu_context_addr (iommu , i , 0x80 , 0 );
728713 if (context )
729- free_pgtable_page (context );
714+ iommu_free_page (context );
730715 }
731716
732- free_pgtable_page (iommu -> root_entry );
717+ iommu_free_page (iommu -> root_entry );
733718 iommu -> root_entry = NULL ;
734719}
735720
@@ -867,7 +852,7 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
867852 if (!dma_pte_present (pte )) {
868853 uint64_t pteval ;
869854
870- tmp_page = alloc_pgtable_page (domain -> nid , gfp );
855+ tmp_page = iommu_alloc_page_node (domain -> nid , gfp );
871856
872857 if (!tmp_page )
873858 return NULL ;
@@ -879,7 +864,7 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
879864
880865 if (cmpxchg64 (& pte -> val , 0ULL , pteval ))
881866 /* Someone else set it while we were thinking; use theirs. */
882- free_pgtable_page (tmp_page );
867+ iommu_free_page (tmp_page );
883868 else
884869 domain_flush_cache (domain , pte , sizeof (* pte ));
885870 }
@@ -992,7 +977,7 @@ static void dma_pte_free_level(struct dmar_domain *domain, int level,
992977 last_pfn < level_pfn + level_size (level ) - 1 )) {
993978 dma_clear_pte (pte );
994979 domain_flush_cache (domain , pte , sizeof (* pte ));
995- free_pgtable_page (level_pte );
980+ iommu_free_page (level_pte );
996981 }
997982next :
998983 pfn += level_size (level );
@@ -1016,7 +1001,7 @@ static void dma_pte_free_pagetable(struct dmar_domain *domain,
10161001
10171002 /* free pgd */
10181003 if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN (domain -> gaw )) {
1019- free_pgtable_page (domain -> pgd );
1004+ iommu_free_page (domain -> pgd );
10201005 domain -> pgd = NULL ;
10211006 }
10221007}
@@ -1118,7 +1103,7 @@ static int iommu_alloc_root_entry(struct intel_iommu *iommu)
11181103{
11191104 struct root_entry * root ;
11201105
1121- root = alloc_pgtable_page (iommu -> node , GFP_ATOMIC );
1106+ root = iommu_alloc_page_node (iommu -> node , GFP_ATOMIC );
11221107 if (!root ) {
11231108 pr_err ("Allocating root entry for %s failed\n" ,
11241109 iommu -> name );
@@ -1841,7 +1826,7 @@ static void domain_exit(struct dmar_domain *domain)
18411826 LIST_HEAD (freelist );
18421827
18431828 domain_unmap (domain , 0 , DOMAIN_MAX_PFN (domain -> gaw ), & freelist );
1844- put_pages_list (& freelist );
1829+ iommu_put_pages_list (& freelist );
18451830 }
18461831
18471832 if (WARN_ON (!list_empty (& domain -> devices )))
@@ -2497,7 +2482,7 @@ static int copy_context_table(struct intel_iommu *iommu,
24972482 if (!old_ce )
24982483 goto out ;
24992484
2500- new_ce = alloc_pgtable_page (iommu -> node , GFP_KERNEL );
2485+ new_ce = iommu_alloc_page_node (iommu -> node , GFP_KERNEL );
25012486 if (!new_ce )
25022487 goto out_unmap ;
25032488
@@ -3426,7 +3411,7 @@ static int intel_iommu_memory_notifier(struct notifier_block *nb,
34263411 start_vpfn , mhp -> nr_pages ,
34273412 list_empty (& freelist ), 0 );
34283413 rcu_read_unlock ();
3429- put_pages_list (& freelist );
3414+ iommu_put_pages_list (& freelist );
34303415 }
34313416 break ;
34323417 }
@@ -3833,7 +3818,7 @@ static int md_domain_init(struct dmar_domain *domain, int guest_width)
38333818 domain -> max_addr = 0 ;
38343819
38353820 /* always allocate the top pgd */
3836- domain -> pgd = alloc_pgtable_page (domain -> nid , GFP_ATOMIC );
3821+ domain -> pgd = iommu_alloc_page_node (domain -> nid , GFP_ATOMIC );
38373822 if (!domain -> pgd )
38383823 return - ENOMEM ;
38393824 domain_flush_cache (domain , domain -> pgd , PAGE_SIZE );
@@ -3987,7 +3972,7 @@ int prepare_domain_attach_device(struct iommu_domain *domain,
39873972 pte = dmar_domain -> pgd ;
39883973 if (dma_pte_present (pte )) {
39893974 dmar_domain -> pgd = phys_to_virt (dma_pte_addr (pte ));
3990- free_pgtable_page (pte );
3975+ iommu_free_page (pte );
39913976 }
39923977 dmar_domain -> agaw -- ;
39933978 }
@@ -4141,7 +4126,7 @@ static void intel_iommu_tlb_sync(struct iommu_domain *domain,
41414126 if (dmar_domain -> nested_parent )
41424127 parent_domain_flush (dmar_domain , start_pfn , nrpages ,
41434128 list_empty (& gather -> freelist ));
4144- put_pages_list (& gather -> freelist );
4129+ iommu_put_pages_list (& gather -> freelist );
41454130}
41464131
41474132static phys_addr_t intel_iommu_iova_to_phys (struct iommu_domain * domain ,
0 commit comments