Skip to content

Commit

Permalink
iommu/vt-d: Get rid of iommu_attach_vm_domain()
Browse files Browse the repository at this point in the history
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: Joerg Roedel <jroedel@suse.de>
  • Loading branch information
Joerg Roedel committed Aug 12, 2015
1 parent 8bf4781 commit e241142
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions drivers/iommu/intel-iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1671,8 +1671,13 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
int num;
unsigned long ndomains;

num = domain->iommu_did[iommu->seq_id];
if (num)
return num;

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) {
set_bit(num, iommu->domain_ids);
set_iommu_domain(iommu, num, domain);
Expand All @@ -1681,6 +1686,9 @@ static int __iommu_attach_domain(struct dmar_domain *domain,
num = -ENOSPC;
}

if (num < 0)
pr_err("%s: No free domain ids\n", iommu->name);

return num;
}

Expand All @@ -1693,24 +1701,10 @@ static int iommu_attach_domain(struct dmar_domain *domain,
spin_lock_irqsave(&iommu->lock, flags);
num = __iommu_attach_domain(domain, iommu);
spin_unlock_irqrestore(&iommu->lock, flags);
if (num < 0)
pr_err("%s: No free domain ids\n", iommu->name);

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,
struct intel_iommu *iommu)
{
Expand Down Expand Up @@ -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(domain)) {
id = iommu_attach_vm_domain(domain, iommu);
id = __iommu_attach_domain(domain, iommu);
if (id < 0) {
spin_unlock_irqrestore(&iommu->lock, flags);
pr_err("%s: No free domain ids\n", iommu->name);
Expand Down

0 comments on commit e241142

Please sign in to comment.