Commit fdb0ac80 authored by Dan Williams's avatar Dan Williams

async_tx: make async_tx_run_dependencies() easier to read

* Rename 'next' to 'dep'
* Move the channel switch check inside the loop to simplify
  termination
Acked-by: default avatarIlya Yanok <yanok@emcraft.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 6bfb09a1
...@@ -115,34 +115,32 @@ EXPORT_SYMBOL_GPL(dma_wait_for_async_tx); ...@@ -115,34 +115,32 @@ EXPORT_SYMBOL_GPL(dma_wait_for_async_tx);
* (start) dependent operations on their target channel * (start) dependent operations on their target channel
* @tx: transaction with dependencies * @tx: transaction with dependencies
*/ */
void void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
{ {
struct dma_async_tx_descriptor *next = tx->next; struct dma_async_tx_descriptor *dep = tx->next;
struct dma_async_tx_descriptor *dep_next;
struct dma_chan *chan; struct dma_chan *chan;
if (!next) if (!dep)
return; return;
tx->next = NULL; chan = dep->chan;
chan = next->chan;
/* keep submitting up until a channel switch is detected /* keep submitting up until a channel switch is detected
* in that case we will be called again as a result of * in that case we will be called again as a result of
* processing the interrupt from async_tx_channel_switch * processing the interrupt from async_tx_channel_switch
*/ */
while (next && next->chan == chan) { for (; dep; dep = dep_next) {
struct dma_async_tx_descriptor *_next; spin_lock_bh(&dep->lock);
dep->parent = NULL;
spin_lock_bh(&next->lock); dep_next = dep->next;
next->parent = NULL; if (dep_next && dep_next->chan == chan)
_next = next->next; dep->next = NULL; /* ->next will be submitted */
if (_next && _next->chan == chan) else
next->next = NULL; dep_next = NULL; /* submit current dep and terminate */
spin_unlock_bh(&next->lock); spin_unlock_bh(&dep->lock);
next->tx_submit(next); dep->tx_submit(dep);
next = _next;
} }
chan->device->device_issue_pending(chan); chan->device->device_issue_pending(chan);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment