amd_iommu: fix lock imbalance
authorJiri Slaby <jirislaby@gmail.com>
Thu, 28 May 2009 07:54:48 +0000 (09:54 +0200)
committerJoerg Roedel <joerg.roedel@amd.com>
Wed, 3 Jun 2009 08:34:55 +0000 (10:34 +0200)
In alloc_coherent there is an omitted unlock on the path where mapping
fails. Add the unlock.

[ Impact: fix lock imbalance in alloc_coherent ]

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
arch/x86/kernel/amd_iommu.c

index d6898833c363bb9670388975880a830f2a7f6705..9f89bb645b314bb182faa6b211e5d17b4dc7e9c3 100644 (file)
@@ -1541,8 +1541,10 @@ static void *alloc_coherent(struct device *dev, size_t size,
        *dma_addr = __map_single(dev, iommu, domain->priv, paddr,
                                 size, DMA_BIDIRECTIONAL, true, dma_mask);
 
-       if (*dma_addr == bad_dma_address)
+       if (*dma_addr == bad_dma_address) {
+               spin_unlock_irqrestore(&domain->lock, flags);
                goto out_free;
+       }
 
        iommu_completion_wait(iommu);