forked from luck/tmp_suning_uos_patched
intel-iommu: Change dma_addr_level_pte() to dma_pfn_level_pte()
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
77dfa56c94
commit
90dcfb5eb2
@ -740,8 +740,9 @@ static struct dma_pte * addr_to_dma_pte(struct dmar_domain *domain, u64 addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* return address's pte at specific level */
|
/* return address's pte at specific level */
|
||||||
static struct dma_pte *dma_addr_level_pte(struct dmar_domain *domain, u64 addr,
|
static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain,
|
||||||
int level)
|
unsigned long pfn,
|
||||||
|
int level)
|
||||||
{
|
{
|
||||||
struct dma_pte *parent, *pte = NULL;
|
struct dma_pte *parent, *pte = NULL;
|
||||||
int total = agaw_to_level(domain->agaw);
|
int total = agaw_to_level(domain->agaw);
|
||||||
@ -749,7 +750,7 @@ static struct dma_pte *dma_addr_level_pte(struct dmar_domain *domain, u64 addr,
|
|||||||
|
|
||||||
parent = domain->pgd;
|
parent = domain->pgd;
|
||||||
while (level <= total) {
|
while (level <= total) {
|
||||||
offset = pfn_level_offset(addr >> VTD_PAGE_SHIFT, total);
|
offset = pfn_level_offset(pfn, total);
|
||||||
pte = &parent[offset];
|
pte = &parent[offset];
|
||||||
if (level == total)
|
if (level == total)
|
||||||
return pte;
|
return pte;
|
||||||
@ -768,7 +769,7 @@ static void dma_pte_clear_one(struct dmar_domain *domain, u64 addr)
|
|||||||
struct dma_pte *pte = NULL;
|
struct dma_pte *pte = NULL;
|
||||||
|
|
||||||
/* get last level pte */
|
/* get last level pte */
|
||||||
pte = dma_addr_level_pte(domain, addr, 1);
|
pte = dma_pfn_level_pte(domain, addr >> VTD_PAGE_SHIFT, 1);
|
||||||
|
|
||||||
if (pte) {
|
if (pte) {
|
||||||
dma_clear_pte(pte);
|
dma_clear_pte(pte);
|
||||||
@ -817,7 +818,8 @@ static void dma_pte_free_pagetable(struct dmar_domain *domain,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
while (tmp < end) {
|
while (tmp < end) {
|
||||||
pte = dma_addr_level_pte(domain, tmp, level);
|
pte = dma_pfn_level_pte(domain, tmp >> VTD_PAGE_SHIFT,
|
||||||
|
level);
|
||||||
if (pte) {
|
if (pte) {
|
||||||
free_pgtable_page(
|
free_pgtable_page(
|
||||||
phys_to_virt(dma_pte_addr(pte)));
|
phys_to_virt(dma_pte_addr(pte)));
|
||||||
|
Loading…
Reference in New Issue
Block a user