|
@@ -3149,14 +3149,16 @@ free_domains:
|
|
|
|
|
|
static void cleanup_domain(struct protection_domain *domain)
|
|
|
{
|
|
|
- struct iommu_dev_data *dev_data, *next;
|
|
|
+ struct iommu_dev_data *entry;
|
|
|
unsigned long flags;
|
|
|
|
|
|
write_lock_irqsave(&amd_iommu_devtable_lock, flags);
|
|
|
|
|
|
- list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {
|
|
|
- __detach_device(dev_data);
|
|
|
- atomic_set(&dev_data->bind, 0);
|
|
|
+ while (!list_empty(&domain->dev_list)) {
|
|
|
+ entry = list_first_entry(&domain->dev_list,
|
|
|
+ struct iommu_dev_data, list);
|
|
|
+ __detach_device(entry);
|
|
|
+ atomic_set(&entry->bind, 0);
|
|
|
}
|
|
|
|
|
|
write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
|