diff options
Diffstat (limited to 'drivers/iommu/intel-iommu.c')
| -rw-r--r-- | drivers/iommu/intel-iommu.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 1232336b960e..40dfbc0444c0 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c | |||
| @@ -4029,14 +4029,6 @@ static int device_notifier(struct notifier_block *nb, | |||
| 4029 | if (action != BUS_NOTIFY_REMOVED_DEVICE) | 4029 | if (action != BUS_NOTIFY_REMOVED_DEVICE) |
| 4030 | return 0; | 4030 | return 0; |
| 4031 | 4031 | ||
| 4032 | /* | ||
| 4033 | * If the device is still attached to a device driver we can't | ||
| 4034 | * tear down the domain yet as DMA mappings may still be in use. | ||
| 4035 | * Wait for the BUS_NOTIFY_UNBOUND_DRIVER event to do that. | ||
| 4036 | */ | ||
| 4037 | if (action == BUS_NOTIFY_DEL_DEVICE && dev->driver != NULL) | ||
| 4038 | return 0; | ||
| 4039 | |||
| 4040 | domain = find_domain(dev); | 4032 | domain = find_domain(dev); |
| 4041 | if (!domain) | 4033 | if (!domain) |
| 4042 | return 0; | 4034 | return 0; |
| @@ -4428,6 +4420,10 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, | |||
| 4428 | domain_remove_one_dev_info(old_domain, dev); | 4420 | domain_remove_one_dev_info(old_domain, dev); |
| 4429 | else | 4421 | else |
| 4430 | domain_remove_dev_info(old_domain); | 4422 | domain_remove_dev_info(old_domain); |
| 4423 | |||
| 4424 | if (!domain_type_is_vm_or_si(old_domain) && | ||
| 4425 | list_empty(&old_domain->devices)) | ||
| 4426 | domain_exit(old_domain); | ||
| 4431 | } | 4427 | } |
| 4432 | } | 4428 | } |
| 4433 | 4429 | ||
