aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2008-12-02 12:20:21 -0500
committerJoerg Roedel <joerg.roedel@amd.com>2009-01-03 08:11:53 -0500
commit86db2e5d47bfa61a151d6ac83263f4bde4d52290 (patch)
treeb6ff290a63a27205b565b39189d6fd4ce2b15703
parent38e817febe2f12bd2fbf92a1df36f41946d0c223 (diff)
AMD IOMMU: make dma_ops_free_pagetable generic
Impact: change code to free pagetables from protection domains The dma_ops_free_pagetable function can only free pagetables from dma_ops domains. Change that to free pagetables of pure protection domains. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
-rw-r--r--arch/x86/kernel/amd_iommu.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
index b11c855af7b4..8a0fd3d09973 100644
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -587,12 +587,12 @@ static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
587 iommu_area_reserve(dom->bitmap, start_page, pages); 587 iommu_area_reserve(dom->bitmap, start_page, pages);
588} 588}
589 589
590static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom) 590static void free_pagetable(struct protection_domain *domain)
591{ 591{
592 int i, j; 592 int i, j;
593 u64 *p1, *p2, *p3; 593 u64 *p1, *p2, *p3;
594 594
595 p1 = dma_dom->domain.pt_root; 595 p1 = domain->pt_root;
596 596
597 if (!p1) 597 if (!p1)
598 return; 598 return;
@@ -613,6 +613,8 @@ static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom)
613 } 613 }
614 614
615 free_page((unsigned long)p1); 615 free_page((unsigned long)p1);
616
617 domain->pt_root = NULL;
616} 618}
617 619
618/* 620/*
@@ -624,7 +626,7 @@ static void dma_ops_domain_free(struct dma_ops_domain *dom)
624 if (!dom) 626 if (!dom)
625 return; 627 return;
626 628
627 dma_ops_free_pagetable(dom); 629 free_pagetable(&dom->domain);
628 630
629 kfree(dom->pte_pages); 631 kfree(dom->pte_pages);
630 632