Commit fdb0ac80618729e6b12121c66449b8532990eaf3

Authored by Dan Williams
1 parent 6bfb09a100

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: Ilya Yanok <yanok@emcraft.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

Showing 1 changed file with 16 additions and 18 deletions Side-by-side Diff

crypto/async_tx/async_tx.c
... ... @@ -115,34 +115,32 @@
115 115 * (start) dependent operations on their target channel
116 116 * @tx: transaction with dependencies
117 117 */
118   -void
119   -async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
  118 +void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
120 119 {
121   - struct dma_async_tx_descriptor *next = tx->next;
  120 + struct dma_async_tx_descriptor *dep = tx->next;
  121 + struct dma_async_tx_descriptor *dep_next;
122 122 struct dma_chan *chan;
123 123  
124   - if (!next)
  124 + if (!dep)
125 125 return;
126 126  
127   - tx->next = NULL;
128   - chan = next->chan;
  127 + chan = dep->chan;
129 128  
130 129 /* keep submitting up until a channel switch is detected
131 130 * in that case we will be called again as a result of
132 131 * processing the interrupt from async_tx_channel_switch
133 132 */
134   - while (next && next->chan == chan) {
135   - struct dma_async_tx_descriptor *_next;
  133 + for (; dep; dep = dep_next) {
  134 + spin_lock_bh(&dep->lock);
  135 + dep->parent = NULL;
  136 + dep_next = dep->next;
  137 + if (dep_next && dep_next->chan == chan)
  138 + dep->next = NULL; /* ->next will be submitted */
  139 + else
  140 + dep_next = NULL; /* submit current dep and terminate */
  141 + spin_unlock_bh(&dep->lock);
136 142  
137   - spin_lock_bh(&next->lock);
138   - next->parent = NULL;
139   - _next = next->next;
140   - if (_next && _next->chan == chan)
141   - next->next = NULL;
142   - spin_unlock_bh(&next->lock);
143   -
144   - next->tx_submit(next);
145   - next = _next;
  143 + dep->tx_submit(dep);
146 144 }
147 145  
148 146 chan->device->device_issue_pending(chan);