linux/drivers/dma
Lars-Peter Clausen de61608acf dma:of: Use a mutex to protect the of_dma_list
Currently the OF DMA code uses a spin lock to protect the of_dma_list from
concurrent access and a per controller reference count to protect the controller
from being freed while a request operation is in progress. If
of_dma_controller_free() is called for a controller who's reference count is not
zero it will return -EBUSY and not remove the controller. This is fine up until
here, but leaves the question what the caller of of_dma_controller_free() is
supposed to do if the controller couldn't be freed.  The only viable solution
for the caller is to spin on of_dma_controller_free() until it returns success.
E.g.

	do {
		ret = of_dma_controller_free(dev->of_node)
	} while (ret != -EBUSY);

This is rather ugly and unnecessary and none of the current users of
of_dma_controller_free() check it's return value anyway. Instead protect the
list by a mutex. The mutex will be held as long as a request operation is in
progress. So if of_dma_controller_free() is called while a request operation is
in progress it will be put to sleep and only wake up once the request operation
has finished.

This means that it is no longer possible to register or unregister OF DMA
controllers from a context where it's not possible to sleep. But I doubt that
we'll ever need this.

Also rename of_dma_get_controller back to of_dma_find_controller.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2013-05-02 21:50:38 +05:30
..
bestcomm Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2013-02-23 17:09:55 -08:00
ioat Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
ipu dma: ipu_idmac: reuse is_slave_direction helper 2013-01-12 05:07:22 -08:00
ppc4xx Drivers: dma: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
sh Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
amba-pl08x.c pl080.h: moved from arm/include/asm/hardware to include/linux/amba/ 2013-01-13 05:19:45 -08:00
at_hdmac_regs.h dma: Convert dev_printk(KERN_<LEVEL> to dev_<level>( 2013-01-07 22:04:56 -08:00
at_hdmac.c dma: at_hdmac: check direction properly for cyclic transfers 2013-01-12 05:07:21 -08:00
coh901318_lli.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
coh901318.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
coh901318.h dma: coh901318: merge header files 2013-01-07 17:36:37 +01:00
dmaengine.c DMA: of: Constant names 2013-04-15 09:52:03 +05:30
dmaengine.h dmaengine: consolidate initialization of cookies 2012-03-13 11:37:22 +05:30
dmatest.c dmaengine/dmatest: terminate transfers only in case of errors 2013-01-07 22:05:07 -08:00
dw_dmac_regs.h dw_dmac: adjust slave_id accordingly to request line base 2013-03-30 04:34:07 +05:30
dw_dmac.c dw_dmac: adjust slave_id accordingly to request line base 2013-03-30 04:34:07 +05:30
edma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
ep93xx_dma.c dma: ep93xx_dma: reuse is_slave_direction helper 2013-01-12 05:07:22 -08:00
fsldma.c dma: remove use of __devinit 2012-11-28 12:42:36 -08:00
fsldma.h dmaengine: move last completed cookie into generic dma_chan structure 2012-03-13 11:36:06 +05:30
imx-dma.c Merge 3.8-rc5 into driver-core-next 2013-01-25 21:06:30 -08:00
imx-sdma.c dma: imx-sdma: remove unneeded mach/hardware.h inclusion 2012-10-15 10:03:13 +08:00
intel_mid_dma_regs.h dma: fix comments 2012-09-01 08:57:12 -07:00
intel_mid_dma.c Drivers: dma: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
iop-adma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
iovlock.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig drivers/Kconfig: add several missing GENERIC_HARDIRQS dependencies 2013-03-21 13:35:37 +01:00
Makefile Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
mmp_pdma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
mmp_tdma.c dma: Convert to devm_ioremap_resource() 2013-01-25 12:21:46 -08:00
mpc512x_dma.c Drivers: dma: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
mv_xor.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
mv_xor.h dma: mv_xor: clear the window override control registers 2012-11-22 18:16:37 +01:00
mxs-dma.c dma: mxs-dma: Fix build warnings with W=1 2013-01-08 07:35:27 -08:00
of-dma.c dma:of: Use a mutex to protect the of_dma_list 2013-05-02 21:50:38 +05:30
omap-dma.c dmaengine: omap-dma: Start DMA without delay for cyclic channels 2013-04-10 10:33:30 +05:30
pch_dma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
pl330.c DMA: PL330: Add check if device tree compatible 2013-04-02 23:11:04 +05:30
sa11x0-dma.c Drivers: dma: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
sirf-dma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
ste_dma40_ll.c dmaengine: ste_dma40: minor cosmetic fixes 2013-01-14 10:51:01 +01:00
ste_dma40_ll.h dmaengine: ste_dma40: support more than 128 event lines 2013-01-14 10:50:48 +01:00
ste_dma40.c dmaengine: ste_dma40: do not remove descriptors for cyclic transfers 2013-02-14 19:54:31 +05:30
tegra20-apb-dma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
timb_dma.c Drivers: dma: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
TODO dmaengine: remove ste_dma40 from issue_pending TODO 2011-07-14 04:02:08 +05:30
txx9dmac.c dmaengine: add context parameter to prep_slave_sg and prep_dma_cyclic 2012-03-21 19:20:23 +05:30
txx9dmac.h dmaengine: move last completed cookie into generic dma_chan structure 2012-03-13 11:36:06 +05:30
virt-dma.c dmaengine: virt-dma: add support for cyclic DMA periodic callbacks 2012-07-01 14:15:23 +01:00
virt-dma.h dmaengine: virt-dma: add support for cyclic DMA periodic callbacks 2012-07-01 14:15:23 +01:00