@@ -1671,8 +1671,13 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
1671
1671
int num ;
1672
1672
unsigned long ndomains ;
1673
1673
1674
+ num = domain -> iommu_did [iommu -> seq_id ];
1675
+ if (num )
1676
+ return num ;
1677
+
1674
1678
ndomains = cap_ndoms (iommu -> cap );
1675
- num = find_first_zero_bit (iommu -> domain_ids , ndomains );
1679
+ num = find_first_zero_bit (iommu -> domain_ids , ndomains );
1680
+
1676
1681
if (num < ndomains ) {
1677
1682
set_bit (num , iommu -> domain_ids );
1678
1683
set_iommu_domain (iommu , num , domain );
@@ -1681,6 +1686,9 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
1681
1686
num = - ENOSPC ;
1682
1687
}
1683
1688
1689
+ if (num < 0 )
1690
+ pr_err ("%s: No free domain ids\n" , iommu -> name );
1691
+
1684
1692
return num ;
1685
1693
}
1686
1694
@@ -1693,24 +1701,10 @@ static int iommu_attach_domain(struct dmar_domain *domain,
1693
1701
spin_lock_irqsave (& iommu -> lock , flags );
1694
1702
num = __iommu_attach_domain (domain , iommu );
1695
1703
spin_unlock_irqrestore (& iommu -> lock , flags );
1696
- if (num < 0 )
1697
- pr_err ("%s: No free domain ids\n" , iommu -> name );
1698
1704
1699
1705
return num ;
1700
1706
}
1701
1707
1702
- static int iommu_attach_vm_domain (struct dmar_domain * domain ,
1703
- struct intel_iommu * iommu )
1704
- {
1705
- int num ;
1706
-
1707
- num = domain -> iommu_did [iommu -> seq_id ];
1708
- if (num )
1709
- return num ;
1710
-
1711
- return __iommu_attach_domain (domain , iommu );
1712
- }
1713
-
1714
1708
static void iommu_detach_domain (struct dmar_domain * domain ,
1715
1709
struct intel_iommu * iommu )
1716
1710
{
@@ -1947,7 +1941,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1947
1941
1948
1942
if (domain_type_is_vm_or_si (domain )) {
1949
1943
if (domain_type_is_vm (domain )) {
1950
- id = iommu_attach_vm_domain (domain , iommu );
1944
+ id = __iommu_attach_domain (domain , iommu );
1951
1945
if (id < 0 ) {
1952
1946
spin_unlock_irqrestore (& iommu -> lock , flags );
1953
1947
pr_err ("%s: No free domain ids\n" , iommu -> name );
0 commit comments