rk3368: iommu: fix region free position when iovmm_activate failed
authorSimon <xxm@rock-chips.com>
Mon, 25 May 2015 03:48:31 +0000 (11:48 +0800)
committerSimon <xxm@rock-chips.com>
Mon, 25 May 2015 03:54:39 +0000 (11:54 +0800)
Signed-off-by: Simon <xxm@rock-chips.com>
drivers/iommu/rockchip-iovmm.c

index b59bee54712bb70b0c84ea35dec911d1631056d3..595b75c23d042616baa5c66448c2a507d1c471ab 100644 (file)
@@ -148,18 +148,18 @@ dma_addr_t rockchip_iovmm_map(struct device *dev,
        spin_unlock(&vmm->lock);
 
        ret = rockchip_iommu_tlb_invalidate(dev);
-       if (ret)
+       if (ret) {
+               spin_lock(&vmm->lock);
+               list_del(&region->node);
+               spin_unlock(&vmm->lock);
                goto err_map_map;
-
+       }
        dev_dbg(dev->archdata.iommu, "IOVMM: Allocated VM region @ %p/%#X bytes.\n",
        &region->start, region->size);
 
        return region->start;
 
 err_map_map:
-       spin_lock(&vmm->lock);
-       list_del(&region->node);
-       spin_unlock(&vmm->lock);
        iommu_unmap(vmm->domain, start, mapped_size);
        gen_pool_free(vmm->vmm_pool, start, size);
 err_map_noiomem: