[PATCH 3/3] dmar: reduce loop to find multi-devices owned by IOMMU

From: Youquan Song
Date: Thu Dec 12 2013 - 11:41:03 EST


When try to find if the iommu owns other devices in the domain except the
device will be moved. It will loop all devices under the domain if the removed
device is the first device in domain devices list.

This patch will improve it and it only loop before find the removed device and
one of other device, so save the loop time and make the code more clear.

Signed-off-by: Youquan Song <youquan.song@xxxxxxxxx>
---
drivers/iommu/intel-iommu.c | 15 ++++++---------
1 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index aa821fc..9f3bf3f 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -3785,7 +3785,7 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
struct device_domain_info *info, *tmp;
struct intel_iommu *iommu;
unsigned long flags;
- int found = 0;
+ int found = 0, del = 0;

iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number,
pdev->devfn);
@@ -3806,16 +3806,13 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
free_devinfo_mem(info);

spin_lock_irqsave(&device_domain_lock, flags);
-
- if (found)
- break;
- else
- continue;
- }
-
- if (iommu == device_to_iommu(info->segment, info->bus,
+ del = 1;
+ } else if (iommu == device_to_iommu(info->segment, info->bus,
info->devfn))
found = 1;
+
+ if (found & del)
+ break;
}

spin_unlock_irqrestore(&device_domain_lock, flags);
--
1.7.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/