iommu/vt-d: Only insert alias dev_info if there is an alias
authorJoerg Roedel <jroedel@suse.de>
Thu, 23 Jul 2015 16:09:11 +0000 (18:09 +0200)
committerJoerg Roedel <jroedel@suse.de>
Wed, 12 Aug 2015 14:23:36 +0000 (16:23 +0200)
For devices without an PCI alias there will be two
device_domain_info structures added. Prevent that by
checking if the alias is different from the device.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel-iommu.c

index 18e4442..6e61b3e 100644 (file)
@@ -2319,8 +2319,8 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
        struct device_domain_info *info = NULL;
        struct dmar_domain *domain, *tmp;
        struct intel_iommu *iommu;
+       u16 req_id, dma_alias;
        unsigned long flags;
-       u16 dma_alias;
        u8 bus, devfn;
 
        domain = find_domain(dev);
@@ -2331,6 +2331,8 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
        if (!iommu)
                return NULL;
 
+       req_id = ((u16)bus << 8) | devfn;
+
        if (dev_is_pci(dev)) {
                struct pci_dev *pdev = to_pci_dev(dev);
 
@@ -2361,7 +2363,7 @@ static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
        }
 
        /* register PCI DMA alias device */
-       if (dev_is_pci(dev)) {
+       if (req_id != dma_alias && dev_is_pci(dev)) {
                tmp = dmar_insert_one_dev_info(iommu, PCI_BUS_NUM(dma_alias),
                                               dma_alias & 0xff, NULL, domain);