projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
iommu/vt-d: Fix reference count in iommu_prepare_isa
[firefly-linux-kernel-4.4.55.git]
/
drivers
/
iommu
/
intel-iommu.c
diff --git
a/drivers/iommu/intel-iommu.c
b/drivers/iommu/intel-iommu.c
index 6bb32773c3ac3471ab7bf439d9191be757bacb5c..9b9f28ea3db25651388ff7766219996354442b42 100644
(file)
--- a/
drivers/iommu/intel-iommu.c
+++ b/
drivers/iommu/intel-iommu.c
@@
-892,7
+892,7
@@
static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain,
break;
}
break;
}
- if (
pte->val & DMA_PTE_LARGE_PAGE
) {
+ if (
dma_pte_superpage(pte)
) {
*large_page = total;
return pte;
}
*large_page = total;
return pte;
}
@@
-2102,13
+2102,11
@@
static inline void unlink_domain_info(struct device_domain_info *info)
static void domain_remove_dev_info(struct dmar_domain *domain)
{
static void domain_remove_dev_info(struct dmar_domain *domain)
{
- struct device_domain_info *info;
+ struct device_domain_info *info
, *tmp
;
unsigned long flags, flags2;
spin_lock_irqsave(&device_domain_lock, flags);
unsigned long flags, flags2;
spin_lock_irqsave(&device_domain_lock, flags);
- while (!list_empty(&domain->devices)) {
- info = list_entry(domain->devices.next,
- struct device_domain_info, link);
+ list_for_each_entry_safe(info, tmp, &domain->devices, link) {
unlink_domain_info(info);
spin_unlock_irqrestore(&device_domain_lock, flags);
unlink_domain_info(info);
spin_unlock_irqrestore(&device_domain_lock, flags);
@@
-2405,6
+2403,7
@@
static inline void iommu_prepare_isa(void)
printk(KERN_ERR "IOMMU: Failed to create 0-16MiB identity map; "
"floppy might not work\n");
printk(KERN_ERR "IOMMU: Failed to create 0-16MiB identity map; "
"floppy might not work\n");
+ pci_dev_put(pdev);
}
#else
static inline void iommu_prepare_isa(void)
}
#else
static inline void iommu_prepare_isa(void)
@@
-3816,14
+3815,11
@@
int dmar_iommu_notify_scope_dev(struct dmar_pci_notify_info *info)
((void *)rmrr) + rmrr->header.length,
rmrr->segment, rmrru->devices,
rmrru->devices_cnt);
((void *)rmrr) + rmrr->header.length,
rmrr->segment, rmrru->devices,
rmrru->devices_cnt);
- if (ret > 0)
- break;
- else if(ret < 0)
+ if(ret < 0)
return ret;
} else if (info->event == BUS_NOTIFY_DEL_DEVICE) {
return ret;
} else if (info->event == BUS_NOTIFY_DEL_DEVICE) {
- if (dmar_remove_dev_scope(info, rmrr->segment,
- rmrru->devices, rmrru->devices_cnt))
- break;
+ dmar_remove_dev_scope(info, rmrr->segment,
+ rmrru->devices, rmrru->devices_cnt);
}
}
}
}
@@
-4153,7
+4149,6
@@
static int md_domain_init(struct dmar_domain *domain, int guest_width)
domain->iommu_snooping = 0;
domain->iommu_superpage = 0;
domain->max_addr = 0;
domain->iommu_snooping = 0;
domain->iommu_superpage = 0;
domain->max_addr = 0;
- domain->nid = -1;
/* always allocate the top pgd */
domain->pgd = (struct dma_pte *)alloc_pgtable_page(domain->nid);
/* always allocate the top pgd */
domain->pgd = (struct dma_pte *)alloc_pgtable_page(domain->nid);