Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 154772
b: refs/heads/master
c: b026fd2
h: refs/heads/master
v: v3
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Jun 29, 2009
1 parent 8b6abdf commit 1e574fb
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 163cc52ccd2cc5c5ae4e1c886f6fde8547feed2a
refs/heads/master: b026fd28ea23af24a3eea6e5be3f3d0193a8e87d
13 changes: 7 additions & 6 deletions trunk/drivers/pci/intel-iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -692,23 +692,24 @@ static inline unsigned long align_to_level(unsigned long pfn, int level)
return (pfn + level_size(level) - 1) & level_mask(level);
}

static struct dma_pte * addr_to_dma_pte(struct dmar_domain *domain, u64 addr)
static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
unsigned long pfn)
{
int addr_width = agaw_to_width(domain->agaw);
int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT;
struct dma_pte *parent, *pte = NULL;
int level = agaw_to_level(domain->agaw);
int offset;
unsigned long flags;

BUG_ON(!domain->pgd);
BUG_ON(addr >> addr_width);
BUG_ON(addr_width < BITS_PER_LONG && pfn >> addr_width);
parent = domain->pgd;

spin_lock_irqsave(&domain->mapping_lock, flags);
while (level > 0) {
void *tmp_page;

offset = pfn_level_offset(addr >> VTD_PAGE_SHIFT, level);
offset = pfn_level_offset(pfn, level);
pte = &parent[offset];
if (level == 1)
break;
Expand Down Expand Up @@ -1660,7 +1661,7 @@ domain_page_mapping(struct dmar_domain *domain, dma_addr_t iova,
end_pfn = (VTD_PAGE_ALIGN(((u64)hpa) + size)) >> VTD_PAGE_SHIFT;
index = 0;
while (start_pfn < end_pfn) {
pte = addr_to_dma_pte(domain, iova + VTD_PAGE_SIZE * index);
pte = pfn_to_dma_pte(domain, (iova >> VTD_PAGE_SHIFT) + index);
if (!pte)
return -ENOMEM;
/* We don't need lock here, nobody else
Expand Down Expand Up @@ -3533,7 +3534,7 @@ static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,
struct dma_pte *pte;
u64 phys = 0;

pte = addr_to_dma_pte(dmar_domain, iova);
pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT);
if (pte)
phys = dma_pte_addr(pte);

Expand Down

0 comments on commit 1e574fb

Please sign in to comment.