Commit 3426cb3d authored by Joerg Roedel's avatar Joerg Roedel

Merge git://git.infradead.org/iommu-2.6 into iommu/fixes

parents aca1bc45 5ae0566a
...@@ -152,7 +152,8 @@ dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event) ...@@ -152,7 +152,8 @@ dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event)
info->seg = pci_domain_nr(dev->bus); info->seg = pci_domain_nr(dev->bus);
info->level = level; info->level = level;
if (event == BUS_NOTIFY_ADD_DEVICE) { if (event == BUS_NOTIFY_ADD_DEVICE) {
for (tmp = dev, level--; tmp; tmp = tmp->bus->self) { for (tmp = dev; tmp; tmp = tmp->bus->self) {
level--;
info->path[level].device = PCI_SLOT(tmp->devfn); info->path[level].device = PCI_SLOT(tmp->devfn);
info->path[level].function = PCI_FUNC(tmp->devfn); info->path[level].function = PCI_FUNC(tmp->devfn);
if (pci_is_root_bus(tmp->bus)) if (pci_is_root_bus(tmp->bus))
......
...@@ -1009,11 +1009,13 @@ static struct page *dma_pte_list_pagetables(struct dmar_domain *domain, ...@@ -1009,11 +1009,13 @@ static struct page *dma_pte_list_pagetables(struct dmar_domain *domain,
if (level == 1) if (level == 1)
return freelist; return freelist;
for (pte = page_address(pg); !first_pte_in_page(pte); pte++) { pte = page_address(pg);
do {
if (dma_pte_present(pte) && !dma_pte_superpage(pte)) if (dma_pte_present(pte) && !dma_pte_superpage(pte))
freelist = dma_pte_list_pagetables(domain, level - 1, freelist = dma_pte_list_pagetables(domain, level - 1,
pte, freelist); pte, freelist);
} pte++;
} while (!first_pte_in_page(pte));
return freelist; return freelist;
} }
...@@ -2235,7 +2237,9 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw) ...@@ -2235,7 +2237,9 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
bridge_devfn = dev_tmp->devfn; bridge_devfn = dev_tmp->devfn;
} }
spin_lock_irqsave(&device_domain_lock, flags); spin_lock_irqsave(&device_domain_lock, flags);
info = dmar_search_domain_by_dev_info(segment, bus, devfn); info = dmar_search_domain_by_dev_info(segment,
bridge_bus,
bridge_devfn);
if (info) { if (info) {
iommu = info->iommu; iommu = info->iommu;
domain = info->domain; domain = info->domain;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment