@@ -1396,23 +1396,6 @@ void domain_detach_iommu(struct dmar_domain *domain, struct intel_iommu *iommu)
1396
1396
}
1397
1397
}
1398
1398
1399
- static void domain_exit (struct dmar_domain * domain )
1400
- {
1401
- if (domain -> pgd ) {
1402
- struct iommu_pages_list freelist =
1403
- IOMMU_PAGES_LIST_INIT (freelist );
1404
-
1405
- domain_unmap (domain , 0 , DOMAIN_MAX_PFN (domain -> gaw ), & freelist );
1406
- iommu_put_pages_list (& freelist );
1407
- }
1408
-
1409
- if (WARN_ON (!list_empty (& domain -> devices )))
1410
- return ;
1411
-
1412
- kfree (domain -> qi_batch );
1413
- kfree (domain );
1414
- }
1415
-
1416
1399
/*
1417
1400
* For kdump cases, old valid entries may be cached due to the
1418
1401
* in-flight DMA and copied pgtable, but there is no unmapping
@@ -3406,9 +3389,24 @@ static void intel_iommu_domain_free(struct iommu_domain *domain)
3406
3389
{
3407
3390
struct dmar_domain * dmar_domain = to_dmar_domain (domain );
3408
3391
3409
- WARN_ON (dmar_domain -> nested_parent &&
3410
- !list_empty (& dmar_domain -> s1_domains ));
3411
- domain_exit (dmar_domain );
3392
+ if (WARN_ON (dmar_domain -> nested_parent &&
3393
+ !list_empty (& dmar_domain -> s1_domains )))
3394
+ return ;
3395
+
3396
+ if (WARN_ON (!list_empty (& dmar_domain -> devices )))
3397
+ return ;
3398
+
3399
+ if (dmar_domain -> pgd ) {
3400
+ struct iommu_pages_list freelist =
3401
+ IOMMU_PAGES_LIST_INIT (freelist );
3402
+
3403
+ domain_unmap (dmar_domain , 0 , DOMAIN_MAX_PFN (dmar_domain -> gaw ),
3404
+ & freelist );
3405
+ iommu_put_pages_list (& freelist );
3406
+ }
3407
+
3408
+ kfree (dmar_domain -> qi_batch );
3409
+ kfree (dmar_domain );
3412
3410
}
3413
3411
3414
3412
int paging_domain_compatible (struct iommu_domain * domain , struct device * dev )
0 commit comments