aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-04-17 23:17:25 -0400
committerDan Williams <dan.j.williams@intel.com>2008-04-17 16:25:05 -0400
commit19242d7233df7d658405d4b7ee1758d21414cfaa (patch)
tree4bffa2700c30fdb454dfa150115a0607c6cf3d2a /include/linux
parent1c62979ed29a8e2bf9fbe1db101c81a0089676f8 (diff)
async_tx: fix multiple dependency submission
Shrink struct dma_async_tx_descriptor and introduce async_tx_channel_switch to properly inject a channel switch interrupt in the descriptor stream. This simplifies the locking model as drivers no longer need to handle dma_async_tx_descriptor.lock. Acked-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dmaengine.h9
1 files changed, 3 insertions, 6 deletions
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 34d440698293..91252a7e4d03 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -221,11 +221,9 @@ typedef void (*dma_async_tx_callback)(void *dma_async_param);
221 * @callback: routine to call after this operation is complete 221 * @callback: routine to call after this operation is complete
222 * @callback_param: general parameter to pass to the callback routine 222 * @callback_param: general parameter to pass to the callback routine
223 * ---async_tx api specific fields--- 223 * ---async_tx api specific fields---
224 * @depend_list: at completion this list of transactions are submitted 224 * @next: at completion submit this descriptor
225 * @depend_node: allow this transaction to be executed after another
226 * transaction has completed, possibly on another channel
227 * @parent: pointer to the next level up in the dependency chain 225 * @parent: pointer to the next level up in the dependency chain
228 * @lock: protect the dependency list 226 * @lock: protect the parent and next pointers
229 */ 227 */
230struct dma_async_tx_descriptor { 228struct dma_async_tx_descriptor {
231 dma_cookie_t cookie; 229 dma_cookie_t cookie;
@@ -236,8 +234,7 @@ struct dma_async_tx_descriptor {
236 dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); 234 dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx);
237 dma_async_tx_callback callback; 235 dma_async_tx_callback callback;
238 void *callback_param; 236 void *callback_param;
239 struct list_head depend_list; 237 struct dma_async_tx_descriptor *next;
240 struct list_head depend_node;
241 struct dma_async_tx_descriptor *parent; 238 struct dma_async_tx_descriptor *parent;
242 spinlock_t lock; 239 spinlock_t lock;
243}; 240};