linux-stable/arch/arm/common
Javi Merino ee3f615819 ARM: 7136/1: pl330: Fix a race condition
If two requests have been submitted and one of them is running, if you
call pl330_chan_ctrl(ch_id, PL330_OP_START), there's a window of time
between the spin_lock_irqsave() and the _state() check in which the
running transaction may finish.  In that case, we don't receive the
interrupt (because they are disabled), but _start() sees that the DMA
is stopped, so it starts it.  The problem is that it sends the
transaction that has just finished again, because pl330_update()
hasn't mark it as done yet.

This patch fixes this race condition by not calling _start() if the
DMA is already executing transactions.  When interrupts are reenabled,
pl330_update() will call _start().

Reference: <1317892206-3600-1-git-send-email-javi.merino@arm.com>

Signed-off-by: Javi Merino <javi.merino@arm.com>
Acked-by: Jassi Brar <jassi.brar@samsung.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2011-10-22 22:11:23 +01:00
..
dmabounce.c ARM: dmabounce: get rid of dma_needs_bounce global function 2011-07-04 08:39:55 +01:00
gic.c Merge branch 'next/devel' of ssh://master.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc 2011-07-26 17:41:04 -07:00
icst.c Update broken web addresses in arch directory. 2010-10-18 11:03:21 +02:00
it8152.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2011-07-29 23:35:05 -07:00
Kconfig ARM: S5P6442: Removing ARCH_S5P6442 2011-05-12 08:10:53 +09:00
locomo.c arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
Makefile ARM: 6872/1: arch:common:Makefile Remove unused config in the Makefile. 2011-04-10 21:13:37 +01:00
pl330.c ARM: 7136/1: pl330: Fix a race condition 2011-10-22 22:11:23 +01:00
sa1111.c ARM: dmabounce: get rid of dma_needs_bounce global function 2011-07-04 08:39:55 +01:00
scoop.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
sharpsl_param.c
time-acorn.c
timer-sp.c clockevents: ARM sp804: obtain sp804 timer rate via clks 2011-05-23 18:04:53 +01:00
uengine.c arm: uengine.c: remove C99 comments 2010-09-23 13:20:06 +02:00
via82c505.c
vic.c ARM: Use struct syscore_ops instead of sysdevs for PM in common code 2011-04-24 19:16:08 +02:00