dmaengine: up-level reference counting to the module level
authorDan Williams <dan.j.williams@intel.com>
Tue, 6 Jan 2009 18:38:14 +0000 (11:38 -0700)
committerDan Williams <dan.j.williams@intel.com>
Tue, 6 Jan 2009 18:38:14 +0000 (11:38 -0700)
commit6f49a57aa5a0c6d4e4e27c85f7af6c83325a12d1
treeafba24357d1f4ff69ccb2b39a19542546590a50b
parent07f2211e4fbce6990722d78c4f04225da9c0e9cf
dmaengine: up-level reference counting to the module level

Simply, if a client wants any dmaengine channel then prevent all dmaengine
modules from being removed.  Once the clients are done re-enable module
removal.

Why?, beyond reducing complication:
1/ Tracking reference counts per-transaction in an efficient manner, as
   is currently done, requires a complicated scheme to avoid cache-line
   bouncing effects.
2/ Per-transaction ref-counting gives the false impression that a
   dma-driver can be gracefully removed ahead of its user (net, md, or
   dma-slave)
3/ None of the in-tree dma-drivers talk to hot pluggable hardware, but
   if such an engine were built one day we still would not need to notify
   clients of remove events.  The driver can simply return NULL to a
   ->prep() request, something that is much easier for a client to handle.

Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
crypto/async_tx/async_tx.c
drivers/dma/dmaengine.c
drivers/dma/dmatest.c
drivers/dma/dw_dmac.c
drivers/mmc/host/atmel-mci.c
include/linux/dmaengine.h
include/net/netdma.h
net/ipv4/tcp.c