diff options
author | Leo Chen <leochen@broadcom.com> | 2010-04-01 14:13:19 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-04-07 16:11:27 -0400 |
commit | 76708ab83962732ba3191ce8a61d8410406c8358 (patch) | |
tree | 92384c92cd430fb7f865f7db0f6bf5624549039d /arch/arm/mach-bcmring | |
parent | 0fdf86754f70e813845af4abaa805165ce57a0bb (diff) |
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: Leo Hao Chen <leochen@broadcom.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-bcmring')
-rw-r--r-- | arch/arm/mach-bcmring/dma.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/arm/mach-bcmring/dma.c b/arch/arm/mach-bcmring/dma.c index 2ccf670ce1ac..29c0a911df26 100644 --- a/arch/arm/mach-bcmring/dma.c +++ b/arch/arm/mach-bcmring/dma.c | |||
@@ -2221,11 +2221,15 @@ EXPORT_SYMBOL(dma_map_create_descriptor_ring); | |||
2221 | int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ | 2221 | int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ |
2222 | int dirtied /* non-zero if any of the pages were modified */ | 2222 | int dirtied /* non-zero if any of the pages were modified */ |
2223 | ) { | 2223 | ) { |
2224 | |||
2225 | int rc = 0; | ||
2224 | int regionIdx; | 2226 | int regionIdx; |
2225 | int segmentIdx; | 2227 | int segmentIdx; |
2226 | DMA_Region_t *region; | 2228 | DMA_Region_t *region; |
2227 | DMA_Segment_t *segment; | 2229 | DMA_Segment_t *segment; |
2228 | 2230 | ||
2231 | down(&memMap->lock); | ||
2232 | |||
2229 | for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) { | 2233 | for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) { |
2230 | region = &memMap->region[regionIdx]; | 2234 | region = &memMap->region[regionIdx]; |
2231 | 2235 | ||
@@ -2239,7 +2243,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ | |||
2239 | printk(KERN_ERR | 2243 | printk(KERN_ERR |
2240 | "%s: vmalloc'd pages are not yet supported\n", | 2244 | "%s: vmalloc'd pages are not yet supported\n", |
2241 | __func__); | 2245 | __func__); |
2242 | return -EINVAL; | 2246 | rc = -EINVAL; |
2247 | goto out; | ||
2243 | } | 2248 | } |
2244 | 2249 | ||
2245 | case DMA_MEM_TYPE_KMALLOC: | 2250 | case DMA_MEM_TYPE_KMALLOC: |
@@ -2276,7 +2281,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ | |||
2276 | printk(KERN_ERR | 2281 | printk(KERN_ERR |
2277 | "%s: Unsupported memory type: %d\n", | 2282 | "%s: Unsupported memory type: %d\n", |
2278 | __func__, region->memType); | 2283 | __func__, region->memType); |
2279 | return -EINVAL; | 2284 | rc = -EINVAL; |
2285 | goto out; | ||
2280 | } | 2286 | } |
2281 | } | 2287 | } |
2282 | 2288 | ||
@@ -2314,9 +2320,10 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ | |||
2314 | memMap->numRegionsUsed = 0; | 2320 | memMap->numRegionsUsed = 0; |
2315 | memMap->inUse = 0; | 2321 | memMap->inUse = 0; |
2316 | 2322 | ||
2323 | out: | ||
2317 | up(&memMap->lock); | 2324 | up(&memMap->lock); |
2318 | 2325 | ||
2319 | return 0; | 2326 | return rc; |
2320 | } | 2327 | } |
2321 | 2328 | ||
2322 | EXPORT_SYMBOL(dma_unmap); | 2329 | EXPORT_SYMBOL(dma_unmap); |