Commit 75f0e461 authored by Varun Sethi's avatar Varun Sethi Committed by Joerg Roedel

iommu/fsl: Fix the device domain attach condition.

Store the domain information for the device, only if it's not already
attached to a domain.
Signed-off-by: default avatarVarun Sethi <Varun.Sethi@freescale.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent d033f48f
...@@ -335,11 +335,6 @@ static struct fsl_dma_domain *iommu_alloc_dma_domain(void) ...@@ -335,11 +335,6 @@ static struct fsl_dma_domain *iommu_alloc_dma_domain(void)
return domain; return domain;
} }
static inline struct device_domain_info *find_domain(struct device *dev)
{
return dev->archdata.iommu_domain;
}
static void remove_device_ref(struct device_domain_info *info, u32 win_cnt) static void remove_device_ref(struct device_domain_info *info, u32 win_cnt)
{ {
unsigned long flags; unsigned long flags;
...@@ -380,7 +375,7 @@ static void attach_device(struct fsl_dma_domain *dma_domain, int liodn, struct d ...@@ -380,7 +375,7 @@ static void attach_device(struct fsl_dma_domain *dma_domain, int liodn, struct d
* Check here if the device is already attached to domain or not. * Check here if the device is already attached to domain or not.
* If the device is already attached to a domain detach it. * If the device is already attached to a domain detach it.
*/ */
old_domain_info = find_domain(dev); old_domain_info = dev->archdata.iommu_domain;
if (old_domain_info && old_domain_info->domain != dma_domain) { if (old_domain_info && old_domain_info->domain != dma_domain) {
spin_unlock_irqrestore(&device_domain_lock, flags); spin_unlock_irqrestore(&device_domain_lock, flags);
detach_device(dev, old_domain_info->domain); detach_device(dev, old_domain_info->domain);
...@@ -399,7 +394,7 @@ static void attach_device(struct fsl_dma_domain *dma_domain, int liodn, struct d ...@@ -399,7 +394,7 @@ static void attach_device(struct fsl_dma_domain *dma_domain, int liodn, struct d
* the info for the first LIODN as all * the info for the first LIODN as all
* LIODNs share the same domain * LIODNs share the same domain
*/ */
if (!old_domain_info) if (!dev->archdata.iommu_domain)
dev->archdata.iommu_domain = info; dev->archdata.iommu_domain = info;
spin_unlock_irqrestore(&device_domain_lock, flags); spin_unlock_irqrestore(&device_domain_lock, flags);
......
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