linux/arch/arm
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
..
boot ARM: 7120/1: remove bashism in check for multiple zreladdrs 2011-10-17 09:13:42 +01:00
common ARM: 7136/1: pl330: Fix a race condition 2011-10-22 22:11:23 +01:00
configs ARM: 7102/1: mach-integrator: update defconfig 2011-10-17 09:13:40 +01:00
include/asm ARM: 7130/1: dev_archdata: add private iommu extension 2011-10-17 09:13:42 +01:00
kernel ARM: 7137/1: Fix error upon adding LL debug 2011-10-20 22:03:57 +01:00
lib ARM: 7125/1: Add unwinding annotations for 64bit division functions 2011-10-17 09:13:42 +01:00
mach-at91 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-bcmring ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-clps711x ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-cns3xxx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-davinci ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-dove ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ebsa110 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ep93xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-exynos4 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-footbridge ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-gemini ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-h720x ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-imx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-integrator ARM: 7087/2: mach-integrator: get timer frequency from clock 2011-10-17 09:12:43 +01:00
mach-iop13xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-iop32x ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-iop33x ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ixp4xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ixp23xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ixp2000 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-kirkwood ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ks8695 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-l7200/include/mach
mach-lpc32xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-mmp ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-msm ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-mv78xx0 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-mx5 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-mxs ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-netx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-nomadik ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-nuc93x ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-omap1 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-omap2 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-orion5x ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-pnx4008 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-prima2 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-pxa ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-realview ARM: 6217/4: mach-realview: expose PB1176 ROM using physmap and map_rom 2011-10-17 09:13:41 +01:00
mach-rpc ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-s3c64xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-s3c2400/include/mach ARM: mach-s3c2400: delete 2011-07-18 10:59:26 -04:00
mach-s3c2410 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-s3c2412 ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-s3c2416 Merge branch 'next/cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc 2011-07-25 12:38:42 -07:00
mach-s3c2440 atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
mach-s3c2443 ARM: S3C24XX: Add clkdev support 2011-07-20 19:11:29 +09:00
mach-s5p64x0 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-s5pc100 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-s5pv210 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-sa1100 ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-shark ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-shmobile ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-spear3xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-spear6xx ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-tcc8k ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-tegra ARM: platform fixups: remove mdesc argument to fixup function 2011-10-17 09:13:41 +01:00
mach-u300 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-ux500 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-versatile ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-vexpress ARM: 7064/1: vexpress: Use wfi macro in platform_do_lowpower. 2011-10-17 09:12:41 +01:00
mach-vt8500 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-w90x900 ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mach-zynq ARM: 7022/1: allow to detect conflicting zreladdrs 2011-10-17 09:12:40 +01:00
mm ARM: 7088/1: entry: fix wrong parameter name used in do_thumb_abort 2011-09-10 23:39:56 +01:00
nwfpe
oprofile
plat-iop ARM: convert PCI defines to variables 2011-07-12 11:19:29 -05:00
plat-mxc iMX: Fix build for iMX53 2011-08-08 08:38:45 +02:00
plat-nomadik net: remove mm.h inclusion from netdevice.h 2011-06-21 19:17:20 -07:00
plat-omap OMAP: omap_device: only override _noirq methods, not normal suspend/resume 2011-08-25 15:31:14 +02:00
plat-orion genirq: replace irq_gc_ack() with {set,clr}_bit variants (fwd) 2011-07-07 16:02:26 +00:00
plat-pxa mmc: sdhci-pxa: move platform data to include/linux/platform_data 2011-07-20 17:20:52 -04:00
plat-s3c24xx Merge branch 'next/deletion' of git+ssh://master.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc 2011-07-25 12:43:28 -07:00
plat-s5p ARM: S5P: fix bug in spdif_clk_get_rate 2011-08-19 21:21:08 +09:00
plat-samsung ARM: SAMSUNG: Add chained enrty/exit call to timer interrupt handler 2011-08-19 20:57:37 +09:00
plat-spear Merge branch 'next/cross-platform' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc 2011-07-26 17:12:10 -07:00
plat-tcc ARM: Consolidate the clkdev header files 2011-07-19 18:09:45 +02:00
plat-versatile ARM: consolidate SMP cross call implementation 2011-05-23 16:53:17 +01:00
tools ARM: Add a few machine types to mach-types 2011-10-17 13:28:46 +01:00
vfp Merge branch 'devel-stable' into for-next 2011-07-22 23:09:07 +01:00
Kconfig ARM: 7017/1: Use generic BUG() handler 2011-10-17 09:13:41 +01:00
Kconfig-nommu Fix common misspellings 2011-03-31 11:26:23 -03:00
Kconfig.debug lib: consolidate DEBUG_STACK_USAGE option 2011-05-25 08:39:54 -07:00
Makefile Merge branch 'imx/dt' into next/dt 2011-07-28 15:25:46 +00:00