Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 125617
b: refs/heads/master
c: eb74ff6
h: refs/heads/master
i:
  125615: 5cf5466
v: v3
  • Loading branch information
Joerg Roedel committed Jan 3, 2009
1 parent 0aacf22 commit 04f841d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c6229ca649aa9b312d1f1de20af8d2603b14eead
refs/heads/master: eb74ff6cc0080c7f6270fdfffba65c4eff23d3ad
41 changes: 41 additions & 0 deletions trunk/arch/x86/kernel/amd_iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,30 @@ static int iommu_map_page(struct protection_domain *dom,
return 0;
}

#ifdef CONFIG_IOMMU_API
static void iommu_unmap_page(struct protection_domain *dom,
unsigned long bus_addr)
{
u64 *pte;

pte = &dom->pt_root[IOMMU_PTE_L2_INDEX(bus_addr)];

if (!IOMMU_PTE_PRESENT(*pte))
return;

pte = IOMMU_PTE_PAGE(*pte);
pte = &pte[IOMMU_PTE_L1_INDEX(bus_addr)];

if (!IOMMU_PTE_PRESENT(*pte))
return;

pte = IOMMU_PTE_PAGE(*pte);
pte = &pte[IOMMU_PTE_L1_INDEX(bus_addr)];

*pte = 0;
}
#endif

/*
* This function checks if a specific unity mapping entry is needed for
* this specific IOMMU.
Expand Down Expand Up @@ -1747,4 +1771,21 @@ static int amd_iommu_map_range(struct iommu_domain *dom,
return 0;
}

static void amd_iommu_unmap_range(struct iommu_domain *dom,
unsigned long iova, size_t size)
{

struct protection_domain *domain = dom->priv;
unsigned long i, npages = iommu_num_pages(iova, size, PAGE_SIZE);

iova &= PAGE_MASK;

for (i = 0; i < npages; ++i) {
iommu_unmap_page(domain, iova);
iova += PAGE_SIZE;
}

iommu_flush_domain(domain->id);
}

#endif

0 comments on commit 04f841d

Please sign in to comment.