|
@@ -3561,10 +3561,13 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
|
|
|
domain_update_iommu_cap(domain);
|
|
|
spin_unlock_irqrestore(&domain->iommu_lock, tmp_flags);
|
|
|
|
|
|
- spin_lock_irqsave(&iommu->lock, tmp_flags);
|
|
|
- clear_bit(domain->id, iommu->domain_ids);
|
|
|
- iommu->domains[domain->id] = NULL;
|
|
|
- spin_unlock_irqrestore(&iommu->lock, tmp_flags);
|
|
|
+ if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
|
|
|
+ !(domain->flags & DOMAIN_FLAG_STATIC_IDENTITY)) {
|
|
|
+ spin_lock_irqsave(&iommu->lock, tmp_flags);
|
|
|
+ clear_bit(domain->id, iommu->domain_ids);
|
|
|
+ iommu->domains[domain->id] = NULL;
|
|
|
+ spin_unlock_irqrestore(&iommu->lock, tmp_flags);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
spin_unlock_irqrestore(&device_domain_lock, flags);
|