Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -335,11 +335,6 @@ static struct fsl_dma_domain *iommu_alloc_dma_domain(void)
	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)
{
	unsigned long flags;
@@ -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.
	 * 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) {
		spin_unlock_irqrestore(&device_domain_lock, flags);
		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
	 * the info for the first LIODN as all
	 * LIODNs share the same domain
	 */
	if (!old_domain_info)
	if (!dev->archdata.iommu_domain)
		dev->archdata.iommu_domain = info;
	spin_unlock_irqrestore(&device_domain_lock, flags);