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

Commit 76708ab8 authored by Leo Chen's avatar Leo Chen Committed by Russell King
Browse files

ARM: 6024/1: bcmring: fix missing down on semaphore in dma.c



Added missing down on the memMap->lock semaphore. Also fixed a return
statement so that we always exit with an up (i.e. early exit via return
is not allowed)

Signed-off-by: default avatarLeo Hao Chen <leochen@broadcom.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 0fdf8675
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -2221,11 +2221,15 @@ EXPORT_SYMBOL(dma_map_create_descriptor_ring);
int dma_unmap(DMA_MemMap_t *memMap,	/* Stores state information about the map */
int dma_unmap(DMA_MemMap_t *memMap,	/* Stores state information about the map */
	      int dirtied	/* non-zero if any of the pages were modified */
	      int dirtied	/* non-zero if any of the pages were modified */
    ) {
    ) {

	int rc = 0;
	int regionIdx;
	int regionIdx;
	int segmentIdx;
	int segmentIdx;
	DMA_Region_t *region;
	DMA_Region_t *region;
	DMA_Segment_t *segment;
	DMA_Segment_t *segment;


	down(&memMap->lock);

	for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) {
	for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) {
		region = &memMap->region[regionIdx];
		region = &memMap->region[regionIdx];


@@ -2239,7 +2243,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
					printk(KERN_ERR
					printk(KERN_ERR
					       "%s: vmalloc'd pages are not yet supported\n",
					       "%s: vmalloc'd pages are not yet supported\n",
					       __func__);
					       __func__);
					return -EINVAL;
					rc = -EINVAL;
					goto out;
				}
				}


			case DMA_MEM_TYPE_KMALLOC:
			case DMA_MEM_TYPE_KMALLOC:
@@ -2276,7 +2281,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
					printk(KERN_ERR
					printk(KERN_ERR
					       "%s: Unsupported memory type: %d\n",
					       "%s: Unsupported memory type: %d\n",
					       __func__, region->memType);
					       __func__, region->memType);
					return -EINVAL;
					rc = -EINVAL;
					goto out;
				}
				}
			}
			}


@@ -2314,9 +2320,10 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
	memMap->numRegionsUsed = 0;
	memMap->numRegionsUsed = 0;
	memMap->inUse = 0;
	memMap->inUse = 0;


out:
	up(&memMap->lock);
	up(&memMap->lock);


	return 0;
	return rc;
}
}


EXPORT_SYMBOL(dma_unmap);
EXPORT_SYMBOL(dma_unmap);