Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165423
b: refs/heads/master
c: 94a91b5
h: refs/heads/master
i:
  165421: 2d3c0a4
  165419: 15e844b
  165415: ea239c9
  165407: 1c8b3f4
v: v3
  • Loading branch information
Donald Dutile authored and David Woodhouse committed Aug 24, 2009
1 parent 93adceb commit 0f6982d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 071e13746f9ebb259987c71ea77f11e7656769a2
refs/heads/master: 94a91b5051a77d8a71d4f11a3240f0d9c51b6cf2
35 changes: 18 additions & 17 deletions trunk/drivers/pci/intel-iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,8 @@ static int iommu_init_domains(struct intel_iommu *iommu)
pr_debug("Number of Domains supportd <%ld>\n", ndomains);
nlongs = BITS_TO_LONGS(ndomains);

spin_lock_init(&iommu->lock);

/* TBD: there might be 64K domains,
* consider other allocation for future chip
*/
Expand All @@ -1170,12 +1172,9 @@ static int iommu_init_domains(struct intel_iommu *iommu)
GFP_KERNEL);
if (!iommu->domains) {
printk(KERN_ERR "Allocating domain array failed\n");
kfree(iommu->domain_ids);
return -ENOMEM;
}

spin_lock_init(&iommu->lock);

/*
* if Caching mode is set, then invalid translations are tagged
* with domainid 0. Hence we need to pre-allocate it.
Expand All @@ -1195,22 +1194,24 @@ void free_dmar_iommu(struct intel_iommu *iommu)
int i;
unsigned long flags;

i = find_first_bit(iommu->domain_ids, cap_ndoms(iommu->cap));
for (; i < cap_ndoms(iommu->cap); ) {
domain = iommu->domains[i];
clear_bit(i, iommu->domain_ids);
if ((iommu->domains) && (iommu->domain_ids)) {
i = find_first_bit(iommu->domain_ids, cap_ndoms(iommu->cap));
for (; i < cap_ndoms(iommu->cap); ) {
domain = iommu->domains[i];
clear_bit(i, iommu->domain_ids);

spin_lock_irqsave(&domain->iommu_lock, flags);
if (--domain->iommu_count == 0) {
if (domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE)
vm_domain_exit(domain);
else
domain_exit(domain);
}
spin_unlock_irqrestore(&domain->iommu_lock, flags);

spin_lock_irqsave(&domain->iommu_lock, flags);
if (--domain->iommu_count == 0) {
if (domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE)
vm_domain_exit(domain);
else
domain_exit(domain);
i = find_next_bit(iommu->domain_ids,
cap_ndoms(iommu->cap), i+1);
}
spin_unlock_irqrestore(&domain->iommu_lock, flags);

i = find_next_bit(iommu->domain_ids,
cap_ndoms(iommu->cap), i+1);
}

if (iommu->gcmd & DMA_GCMD_TE)
Expand Down

0 comments on commit 0f6982d

Please sign in to comment.