dmaengine: make clients responsible for managing channels
The current implementation assumes that a channel will only be used by one client at a time. In order to enable channel sharing the dmaengine core is changed to a model where clients subscribe to channel-available-events. Instead of tracking how many channels a client wants and how many it has received the core just broadcasts the available channels and lets the clients optionally take a reference. The core learns about the clients' needs at dma_event_callback time. In support of multiple operation types, clients can specify a capability mask to only be notified of channels that satisfy a certain set of capabilities. Changelog: * removed DMA_TX_ARRAY_INIT, no longer needed * dma_client_chan_free -> dma_chan_release: switch to global reference counting only at device unregistration time, before it was also happening at client unregistration time * clients now return dma_state_client to dmaengine (ack, dup, nak) * checkpatch.pl fixes * fixup merge with git-ioat Cc: Chris Leech <christopher.leech@intel.com> Signed-off-by:Shannon Nelson <shannon.nelson@intel.com> Signed-off-by:
Dan Williams <dan.j.williams@intel.com> Acked-by:
David S. Miller <davem@davemloft.net>
Showing
- drivers/dma/dmaengine.c 111 additions, 106 deletionsdrivers/dma/dmaengine.c
- drivers/dma/ioatdma.c 0 additions, 1 deletiondrivers/dma/ioatdma.c
- drivers/dma/ioatdma.h 0 additions, 3 deletionsdrivers/dma/ioatdma.h
- include/linux/dmaengine.h 35 additions, 23 deletionsinclude/linux/dmaengine.h
- net/core/dev.c 78 additions, 34 deletionsnet/core/dev.c
Loading
Please register or sign in to comment