aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2011-09-02 14:19:50 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-10-03 11:40:20 -0700
commit5c755fc21c8e84aff1230e27646fe4277a19451d (patch)
tree1e2961b51886bb7d58a4533eb4d5bbfa28e8d84d
parentbfa826f82f1383593e18ad180eb816221627a917 (diff)
iommu/amd: Don't take domain->lock recursivly
commit e33acde91140f1809952d1c135c36feb66a51887 upstream. The domain_flush_devices() function takes the domain->lock. But this function is only called from update_domain() which itself is already called unter the domain->lock. This causes a deadlock situation when the dma-address-space of a domain grows larger than 1GB. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--arch/x86/kernel/amd_iommu.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
index 7c3a95e54ec..7b4381154da 100644
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -773,14 +773,9 @@ static void domain_flush_complete(struct protection_domain *domain)
static void domain_flush_devices(struct protection_domain *domain)
{
struct iommu_dev_data *dev_data;
- unsigned long flags;
-
- spin_lock_irqsave(&domain->lock, flags);
list_for_each_entry(dev_data, &domain->dev_list, list)
device_flush_dte(dev_data->dev);
-
- spin_unlock_irqrestore(&domain->lock, flags);
}
/****************************************************************************