Commit e2411427 authored by Joerg Roedel's avatar Joerg Roedel

iommu/vt-d: Get rid of iommu_attach_vm_domain()

The special case for VM domains is not needed, as other
domains could be attached to the iommu in the same way. So
get rid of this special case.
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 8bf47816
...@@ -1671,8 +1671,13 @@ static int __iommu_attach_domain(struct dmar_domain *domain, ...@@ -1671,8 +1671,13 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
int num; int num;
unsigned long ndomains; unsigned long ndomains;
num = domain->iommu_did[iommu->seq_id];
if (num)
return num;
ndomains = cap_ndoms(iommu->cap); ndomains = cap_ndoms(iommu->cap);
num = find_first_zero_bit(iommu->domain_ids, ndomains); num = find_first_zero_bit(iommu->domain_ids, ndomains);
if (num < ndomains) { if (num < ndomains) {
set_bit(num, iommu->domain_ids); set_bit(num, iommu->domain_ids);
set_iommu_domain(iommu, num, domain); set_iommu_domain(iommu, num, domain);
...@@ -1681,6 +1686,9 @@ static int __iommu_attach_domain(struct dmar_domain *domain, ...@@ -1681,6 +1686,9 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
num = -ENOSPC; num = -ENOSPC;
} }
if (num < 0)
pr_err("%s: No free domain ids\n", iommu->name);
return num; return num;
} }
...@@ -1693,24 +1701,10 @@ static int iommu_attach_domain(struct dmar_domain *domain, ...@@ -1693,24 +1701,10 @@ static int iommu_attach_domain(struct dmar_domain *domain,
spin_lock_irqsave(&iommu->lock, flags); spin_lock_irqsave(&iommu->lock, flags);
num = __iommu_attach_domain(domain, iommu); num = __iommu_attach_domain(domain, iommu);
spin_unlock_irqrestore(&iommu->lock, flags); spin_unlock_irqrestore(&iommu->lock, flags);
if (num < 0)
pr_err("%s: No free domain ids\n", iommu->name);
return num; return num;
} }
static int iommu_attach_vm_domain(struct dmar_domain *domain,
struct intel_iommu *iommu)
{
int num;
num = domain->iommu_did[iommu->seq_id];
if (num)
return num;
return __iommu_attach_domain(domain, iommu);
}
static void iommu_detach_domain(struct dmar_domain *domain, static void iommu_detach_domain(struct dmar_domain *domain,
struct intel_iommu *iommu) struct intel_iommu *iommu)
{ {
...@@ -1947,7 +1941,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain, ...@@ -1947,7 +1941,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
if (domain_type_is_vm_or_si(domain)) { if (domain_type_is_vm_or_si(domain)) {
if (domain_type_is_vm(domain)) { if (domain_type_is_vm(domain)) {
id = iommu_attach_vm_domain(domain, iommu); id = __iommu_attach_domain(domain, iommu);
if (id < 0) { if (id < 0) {
spin_unlock_irqrestore(&iommu->lock, flags); spin_unlock_irqrestore(&iommu->lock, flags);
pr_err("%s: No free domain ids\n", iommu->name); pr_err("%s: No free domain ids\n", iommu->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment