Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff981595 authored by Markus Elfring's avatar Markus Elfring Committed by Lucas Stach
Browse files

drm/etnaviv: Improve unlocking of a mutex in etnaviv_iommu_map_gem()



Add a jump target so that a call of the function "mutex_unlock" is stored
only once at the end of this function implementation.
Replace three calls by goto statements.

This issue was detected by using the Coccinelle software.

Signed-off-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
parent b6047eba
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -263,18 +263,16 @@ int etnaviv_iommu_map_gem(struct etnaviv_iommu *mmu,
		if (iova < 0x80000000 - sg_dma_len(sgt->sgl)) {
			mapping->iova = iova;
			list_add_tail(&mapping->mmu_node, &mmu->mappings);
			mutex_unlock(&mmu->lock);
			return 0;
			ret = 0;
			goto unlock;
		}
	}

	node = &mapping->vram_node;

	ret = etnaviv_iommu_find_iova(mmu, node, etnaviv_obj->base.size);
	if (ret < 0) {
		mutex_unlock(&mmu->lock);
		return ret;
	}
	if (ret < 0)
		goto unlock;

	mmu->last_iova = node->start + etnaviv_obj->base.size;
	mapping->iova = node->start;
@@ -283,12 +281,12 @@ int etnaviv_iommu_map_gem(struct etnaviv_iommu *mmu,

	if (ret < 0) {
		drm_mm_remove_node(node);
		mutex_unlock(&mmu->lock);
		return ret;
		goto unlock;
	}

	list_add_tail(&mapping->mmu_node, &mmu->mappings);
	mmu->need_flush = true;
unlock:
	mutex_unlock(&mmu->lock);

	return ret;