Loading crypto/async_tx/async_tx.c +16 −18 Original line number Diff line number Diff line Loading @@ -115,34 +115,32 @@ EXPORT_SYMBOL_GPL(dma_wait_for_async_tx); * (start) dependent operations on their target channel * @tx: transaction with dependencies */ void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx) void 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; if (!next) if (!dep) return; tx->next = NULL; chan = next->chan; chan = dep->chan; /* keep submitting up until a channel switch is detected * in that case we will be called again as a result of * processing the interrupt from async_tx_channel_switch */ while (next && next->chan == chan) { struct dma_async_tx_descriptor *_next; spin_lock_bh(&next->lock); next->parent = NULL; _next = next->next; if (_next && _next->chan == chan) next->next = NULL; spin_unlock_bh(&next->lock); next->tx_submit(next); next = _next; for (; dep; dep = dep_next) { spin_lock_bh(&dep->lock); dep->parent = NULL; dep_next = dep->next; if (dep_next && dep_next->chan == chan) dep->next = NULL; /* ->next will be submitted */ else dep_next = NULL; /* submit current dep and terminate */ spin_unlock_bh(&dep->lock); dep->tx_submit(dep); } chan->device->device_issue_pending(chan); Loading Loading
crypto/async_tx/async_tx.c +16 −18 Original line number Diff line number Diff line Loading @@ -115,34 +115,32 @@ EXPORT_SYMBOL_GPL(dma_wait_for_async_tx); * (start) dependent operations on their target channel * @tx: transaction with dependencies */ void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx) void 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; if (!next) if (!dep) return; tx->next = NULL; chan = next->chan; chan = dep->chan; /* keep submitting up until a channel switch is detected * in that case we will be called again as a result of * processing the interrupt from async_tx_channel_switch */ while (next && next->chan == chan) { struct dma_async_tx_descriptor *_next; spin_lock_bh(&next->lock); next->parent = NULL; _next = next->next; if (_next && _next->chan == chan) next->next = NULL; spin_unlock_bh(&next->lock); next->tx_submit(next); next = _next; for (; dep; dep = dep_next) { spin_lock_bh(&dep->lock); dep->parent = NULL; dep_next = dep->next; if (dep_next && dep_next->chan == chan) dep->next = NULL; /* ->next will be submitted */ else dep_next = NULL; /* submit current dep and terminate */ spin_unlock_bh(&dep->lock); dep->tx_submit(dep); } chan->device->device_issue_pending(chan); Loading